- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CH语法分析YACC
第4章 语法分析——YACC
LI Wensheng, SCST, BUPT
YACC 使用方法
YACC 源程序
内容安排
一、 YACC说明文件
二、用YACC处理二义文法
三、用LEX建立YACC的词法分析程序
四、 YACC 内部名称
五、YACC使用方式
W
e
n
s
h
e
n
g
L
i
B
U
P
T
2
一、YACC说明文件
由说明部分、翻译规则部分和辅助过程三部分组
成,各部分之间用双百分号分隔。
说明部分:有任选的两节
– 第一节是处于%{和%}之间的部分,在这里是一些普
通的C语言的声明。
– 第二节是文法记号的声明,一般
• 以 %start S 的形式说明文法的开始符号
W • 用 %token IF、DO、…、ID、… 的形式说明记号。
e
n
s
h
e
n • 记号被YACC赋予了不会与任何字符值冲突的数字值
g
L
i
B
U
P
T
3
翻译规则部分
每条规则由一个产生式和有关的语义动作组成
产生式A→α |α |…|α ,在YACC说明文件中写成
1 2 n
A : α { 语义动作1 }
1
| α2 { 语义动作2 }
…
| αn { 语义动作n }
;
用单引号括起来的单个字符,如‘c’ ,是由终结符号c组成
的记号
没有用引号括起来、也没有被说明成token类型的字母数
字串是非终结符号
W
e
n
s 语义动作是用C语言描述的语句序列
h
e
n
g
– ‘$$’表示和产生式左部非终结符号相关的属性值,‘$i’表示和产生
L
i
式右部第i个文法符号相关的属性值。
B
U
P
T
4
辅助过程部分
用C语言书写一些语义动作中用到的辅助程序
名字为yylex()的词法分析程序必须提供
函数main
main()
{
return yyparse();
}
YACC生成的yyparse过程调用一个扫描过程yylex
yyparse 每次调用 yylex() 时,得到一个二元式的记号:
记号,属性值。
W
e
n
s – 返回的记号必须事先在YACC说明文件的第一部分中用%token说
h
e
n
g
明
L
i
– 属性值必须通过YACC定义的变量yylval传给分析程序
B
U
P
T
5
二、YACC对二义文法的处理
处理冲突的两条缺省规则
– “归约-归约”冲突,选择排在前面的产生式进行归约
– “移进-归约”冲突,选择执行移进动作
处理移进-归约冲突的机制
– 利用 %left ‘+’ ‘-’ 说明‘+’和‘-’具有同样的优
文档评论(0)