C语言小型分析器报告

上传人:简****9 文档编号:25481856 上传时间:2021-07-25 格式:DOCX 页数:12 大小:249.32KB
收藏 版权申诉 举报 下载
C语言小型分析器报告_第1页
第1页 / 共12页
C语言小型分析器报告_第2页
第2页 / 共12页
C语言小型分析器报告_第3页
第3页 / 共12页
资源描述:

《C语言小型分析器报告》由会员分享,可在线阅读,更多相关《C语言小型分析器报告(12页珍藏版)》请在装配图网上搜索。

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

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

3、别码单词符号种别码main1-2334int2*2435char3/25=37else5)27|=|=|v4、所采用的语法分析方法的算法思想和主要步骤:算法思想:语法分析程序是在词法分析的基础上, 根据语法规则, 从单词符号串中识别出各种语法成分, 同时进行语法检查, 检查各种语法成分在语法结构上的正确性。 递归下降分析法是确定的自上而下分析法,这种分析法要求文法是LL(1)文法。它的基本思想是,对文法中的每个非终结符编写一个函数(或子程序) ,每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。 由于描述语言的文法常常是递归定义的, 因此相应的这组函数 (或子程序)必然以相互递归的

4、方式进行调用,所以将此种分析法称为递归下降分析法。主要步骤:这次的综合实验用的是自上向下分析方法中的递归下降分析法,步骤如下:构造递归下降分析程序时, 每个函数名是相应的非终结符, 函数体则是根据规则右部符号串的结构编写。(1) 当遇到终结符a 时,则编写语句if (当前读来的输入符号=a)读下一个输入符号。(2) 当遇到非终结符A 时,则编写语句调用 A() 。(3)当遇到A- 规则时,则编写语句if (当前读来的输入符号wFOLLOW(A) eror()。(4) 当某个非终结符的规则有多个侯选式时,按LL(1) 文法的条件能唯一地选择一个侯选式进行推导。5、完成语法制导翻译所用的翻译模式:

5、本程序采用递归下降语法制导的翻译模式。6、程序的主要算法思想和主要函数的算法思想及流程:词法分析程序的主要算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号, 其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号。图1词法分析主程序示意图扫描子程序的算法思想图2词法分析程序流程语法分析程序的算法思想主程序示意图如图 3所示。图3语法分析主程序示意图递归下降分析程序示意图如图 4所示。图4递归下降分析程序示意图语句块分析过程示意图如图 5所示。图5语句块分析示意图语句串分析过程示意图如图 6所示。图6语句串分析示意图statement ( 语句)函数流程

6、如图 7所示;expression (表达式)分析过程如图8所示;term (项)分析过程如图 9所示;condition(条件)分析过程如图 10所示;factor (因子)分析过程如图11所示。否否否函数流程图 7 statement图9 term分析过程示意图图8 expression分析过程示意图图10 condition分析过程示意图12 语义分析主程序示意图语义分析算法思想设置语义过程int gen(op,arg1,arg2,result)该函数是将四元式(op,arg1,arg2,result) 送到四元式表中。char *newtemp()该函数回送一个新的临时变量名,临时变量

7、名产生的顺序为T1,T2,.int merg(p1,p2)该函数将以pl和p2为头指针的两条链合并为一,合并后的链首为返回值。int bp(p,t)该函数的功能是把 p所链接的每个四元式的第四区段都填为t。三、测试实例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): (=,T3, ,z)四、小结与体会学习编译原理这门课程,我对计算机编译程序有了一定的认识和了解,对于程序的编译从高级语言到机器语言的过程有了很深刻的认识, 同时也增强了动手和实践的能力。 虽然在遇到了不少困难, 但是正因为这些困难, 我也学到了更多的东西。 首先, 要勇于面对困难,只要敢于去做,并将所学灵活运用,定能取得成功。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!