C语言小型分析器报告_第1页
C语言小型分析器报告_第2页
C语言小型分析器报告_第3页
C语言小型分析器报告_第4页
C语言小型分析器报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言小型分析器实验报告一、实验内容与要求内容:选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序。要求:1、选择部分C语言的语法成分,设计其词法分析程序、语法语义分析程序。2、设计并实现含多条简单赋值语句的语法分析程序,要求有一定的出错提示与恢复功能。3、设计并实现将简单赋值语句翻译成四元式的语法语义分析程序,要求有一定的出错提示和恢复功能。二、设计方案1、 待分析的简化C语言的词法说明:词法分析程序所输出的单词符号通常表示成如下的二元式:(单词种别,单词自身的值)1. 单词种别单词种别表示单词的种类,它是语法分析需要的信息,一个语言的单词符号如何划分种类,分成几个种类,怎样编码

2、,它主要取决于处理上的方便,通常的方法是让每种单词对应一个整数码,其目的是最大限度地把各个单词区别开来。基本字可将其全体视为一种,也可以一字一种。采用一字一种的分法处理起来较为方便。标识符一般统归为一种。常数可统归为一种,也可以按类型(整型、实型、布尔型等)分种。运算符和界符可采用一符一种的分法,也可以统一为一种。2. 单词自身的值单词自身的值是编译中其他阶段所需要的信息。可以采用以下两种方法来确定它的值。 如果一个种别码对应一个单词符号,则种别码可以代表单词自身。如果一个种别码对应多个单词符号,则单词自身值是单词符号的机内码。 2、单词符号的种别编码方案:表1单词种别码单词符号种别码单词符号

3、种别码单词符号种别码main1-23;34int2*2435char3/25=37else5)27=38for628=39while729!=40Letter(letter|digit)*103001000Digitdigit*2031ERROR-1=21,32+22:333、待分析的简化C语言的语法规则说明:程序 main()语句块语句块语句串语句串语句;语句语句赋值语句|条件语句|循环语句赋值语句 ID =表达式条件语句 if条件语句块循环语句 while条件语句块条件(表达式关系符表达式)表达式项+项|-项项因子*因子|/因子因子 ID | NUM |(表达式)关系符|4、所采用的语法分

4、析方法的算法思想和主要步骤:算法思想:语法分析程序是在词法分析的基础上,根据语法规则,从单词符号串中识别出各种语法成分,同时进行语法检查,检查各种语法成分在语法结构上的正确性。递归下降分析法是确定的自上而下分析法,这种分析法要求文法是(1)文法。它的基本思想是,对文法中的每个非终结符编写一个函数(或子程序),每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。由于描述语言的文法常常是递归定义的,因此相应的这组函数(或子程序)必然以相互递归的方式进行调用,所以将此种分析法称为递归下降分析法。主要步骤:这次的综合实验用的是自上向下分析方法中的递归下降分析法,步骤如下:构造递归下降分析程序

5、时,每个函数名是相应的非终结符,函数体则是根据规则右部符号串的结构编写。(1)当遇到终结符a时,则编写语句if(当前读来的输入符号a)读下一个输入符号。(2)当遇到非终结符A时,则编写语句调用A()。(3)当遇到A规则时,则编写语句if(当前读来的输入符号FOLLOW(A))eror()。(4)当某个非终结符的规则有多个侯选式时,按LL(1)文法的条件能唯一地选择一个侯选式进行推导。5、完成语法制导翻译所用的翻译模式:本程序采用递归下降语法制导的翻译模式。6、程序的主要算法思想和主要函数的算法思想及流程:词法分析程序的主要算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符

6、号,其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号。置初值调用扫描子程序是否输入串结束输出单词二元组结束图1 词法分析主程序示意图扫描子程序的算法思想变量初始化 否是其他符号运算符,界符等符号字母数字否是返回忽略空格是否文件结束 是否关键字Syn为对应关键字的单词种别码对不同符号给出相应的syn值拼字符串拼数Syn=10Syn=11报错返回图2 词法分析程序流程语法分析程序的算法思想主程序示意图如图3所示。置初值调用scaner读下一个单词符号调用lrparser结束图3 语法分析主程序示意图递归下降分析程序示意图如图4所示。是否否否是lrparser调用scaner调

7、用语句块分析函数是否单词串main()源程序是否结束打印分析成功出错处理图4递归下降分析程序示意图语句块分析过程示意图如图5所示。是否是否调用scaner调用语句串分析过程是否是否出错处理出口图5语句块分析示意图语句串分析过程示意图如图6所示。否是调用statement函数 调用scaner调用statement函数是否;出错处理否图6语句串分析示意图statement (语句) 函数流程如图7所示;expression(表达式)分析过程如图8所示;term(项)分析过程如图9所示;condition(条件)分析过程如图10所示;factor(因子)分析过程如图11所示。是是是是否否否是否标识

8、符否调用scaner是否=调用scaner调用expression调用scaner调用condition调用语句块出错处理调用scaner调用condition调用语句块是否ifififfifififif标识符是否while图7 statement函数流程调用term调用factor调用ffactor否是是否*、/调用scaner调用factor出错处理否是是否+、-调用scaner调用term出错处理图8 expression分析过程示意图 图9 term分析过程示意图否是调用expression是否逻辑运算符调用scaner调用expression出错处理图10 condition分析过程

9、示意图否是否是是否否是是否数字调用scaner调用expression出错处理是否标识符是否(是否)调用scaner调用scaner图11 factor分析过程示意图语义分析算法思想设置语义过程int gen(op,arg1,arg2,result)该函数是将四元式(op,arg1,arg2,result)送到四元式表中。char *newtemp( )该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,.int merg(p1,p2)该函数将以p1和p2为头指针的两条链合并为一,合并后的链首为返回值。int bp(p,t)该函数的功能是把p所链接的每个四元式的第四区段都填为t。置

10、初值调用scaner调用lrparser打印四元式列表结束图12 语义分析主程序示意图三、测试实例1、 测试实例: main() x=12; y=4; z=(x+y)*3/x;2、测试结果:(1,main)(26,()(27,)(30,)(10,x)(21,=)(20,12)(34,;)(10,y)(21,=)(20,4)(34,;)(10,z)(21,=)(26,()(10,x)(22,+)(10,y)(27,)(24,*)(20,3)(25,/)(10,x)(34,;)(31,)(1000, )输入程序的四元组如下所示:(1):(=,12,x)(2):(=,4,y)(3):(+,x,y,T1)(4):(*,T1,3,T2)(5):(/,T2,x,T3)(6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论