Yacc 语法规则具有以下一般格式:
8-)03>
6&>32
A
在这个例子中,result 是规则描述的非终端符号。Components 是根据规则放在一起的不同的终端和
非终端符号。 如果匹配特定序列的话 Components 后面可以跟随要执行的动作。 考虑如下的例子:
)-MIIPMI0
D:*)-?*R8)-?*:EE1A2
SMIIPRI0
D:*)-?*R8=8-?*:EE1A2
A
如果上例中序列 NAME EQ NAME 被匹配,将执行相应的 { } 括号中的动作。 这里另一个有用的
就是 $1 和 $3 的使用, 它们引用了标记 NAME 和 NAME(或者第二行的 VALUE)的值。 lexer 通
过 Yacc 的变量 yylval 返回这些值。标记 NAME 的 Lex 代码是这样的:
.+,+(/
)027
??
0)20''=@<8''A
8MIA2
文件解析例子的规则段是这样的:
文件解析的语法
G-<G
S<
A
<-MIIPQI0
D:?;?'<TTT:EE1A2
A
??
回页首
附加 C 代码