编译原理第章+语法分析教学教材.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为了节省空间,我们将文法G[E]分析动作表(ACTION)和状态转换表(GOTO)关于终结符的各列对应地进行合并,合并之后分析表如下表所示。(关于表的构造方法以后再讨论) 即对文法中的任意一个非终结符号,其规则右部有多个选择时,若由各个选择所推出的终结符号串首符号集合要两两不相交。这样,就可能根据当时读进的符号是属于哪个选择的FIRST(αi),来唯一地确定应该选用哪个选择来匹配输入串。 第四章 语法分析 §4.4 语法分析程序的自动生成 一、分析器的生成器YACC 1. YACC的定义 2. YACC的工作过程 3. YACC的规格说明 二、用YACC处理二义性文法 §4.4 语法分析程序的自动生成 随着许多新语言的出现及计算机技术的发展,人们对开发编译程序的软件工具的需求大大增长。以LR文法和分析方法为基础,从本世纪70年代开始出现自动生成语法分析程序的工具。YACC(Yet Another Compiler-Compiler)就是其中最杰出代表。该系统是美国贝尔实验室的软件产品,为UNIX操作系统下的一个软件开发工具。它是由S·C· Johnson设计的。目前已经移植到多种操作系统上,并已成功开发了许多编译系统,深受软件工作者所喜爱。 §4.4 语法分析程序的自动生成 一、分析器的生成器YACC 1.YACC的定义 YACC是一个程序(软件工具),它接受LALR 文法类,用户 提供关于语法分析器的规格说明,基 于LALR语法分析的原理,自动构造一个语法分析 器;并且能根据规格说明中给出的语义动作 建立规定 的翻译。 §4.4 语法分析程序的自动生成 一、分析器的生成器YACC 2.YACC的工作过程 (1)首先需要准备一个包含编译器性能规格的YACC说明文件, 例如translate.y表示。 (2)在UNIX环境下用命令yacc translate.y,使用LALR方 法可把文件translate.y翻译成C程序。我们用y.tb.c表示,程 序y.tab.c包含用C语言写的LALR分析器和用户准备的C语 言程序。 (3)为了使LALR分析表少占空间,使用了合并技术压缩分析表 规模,用命令ccy.tab.c-ly对y.tab进行编译,其中ly表示使用 LR分析程序的库,编译结果得到目标程序a.out。它完成 YACC程序指定的翻译。 (4)如果需要其它过程,它们可以和y.tab.c一起编译或装入,就 和使用任何C程序一样。 YACC的工作过程如下图所示 Yacc 编译器 C 编译器 a.out Yacc 说明 Translate.y y.tab.c y.tab.c a.out 输入 输出 §4.4 语法分析程序的自动生成 一、分析器的生成器YACC 3.YACC的规格说明 YACC的语言程序也称YACC规格说明,和第三章 介绍的LEX规格说明类似。它是由说明部分、翻译规则和辅助过程三部分组成,各部分之间用双百分号分隔,如下图所示。 说明部分 %% 翻译规则 %% 辅助过程 为了说明怎样准备YACC的源程序,我们构造一个简单台式计算器,它读一个算术表达式,计算它,并打印它的值。设算术表达式文法如下: E∷=E+T|T T∷=T*F|F F∷=(E)|digit 其中digit表示0~9的数字。根据这一文法写出YACC的规格说明如 下: (1)%{ (2)#include〈ctype.h〉 (3)%} (4)token DIGIT (5)%% 在规格说明里,第(1)~(4)行是YACC规格说明的说明部分,其中包括可供选择的两部分。用% {和%}括起来的部分是C语言程序的正规说明,可以说明翻译规则和辅助过程里使用的变量和函数的类型。这里用第(2)行所示的蕴含控制行代替全部说明,具体说明在文件ctype.h里。第(4)行的说明指出DIGIT是token类型的词汇,供后面两部分引用。 (6)line:expr’\n’{printf(%d\n,$1} (7); (8)expr:expr’+’term{$$=$1+$3;} (9)| term (10); (11)term:term’*’ factor {$$=$1*$3;}

文档评论(0)

yuzongxu123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档