最新2022城市学院《编译原理》实验指导书4

上传人:小*** 文档编号:139331225 上传时间:2022-08-22 格式:DOC 页数:9 大小:462KB
收藏 版权申诉 举报 下载
最新2022城市学院《编译原理》实验指导书4_第1页
第1页 / 共9页
最新2022城市学院《编译原理》实验指导书4_第2页
第2页 / 共9页
资源描述:

《最新2022城市学院《编译原理》实验指导书4》由会员分享,可在线阅读,更多相关《最新2022城市学院《编译原理》实验指导书4(9页珍藏版)》请在装配图网上搜索。

1、编译原理实验指导书适用实验课时:30适用对象:计算机科学与技术专业 网络工程专业 软件工程专业实验目的和内容编译原理实验的目的是使学生将编译理论运用到实际当中,实现一个简单语言集的词法分析程序、语法分析程序和简单语义处理程序,验证实际编译系统的实现方法,并加深对编译理论的认识。基本实验分为两个部分,实验一识别无符号数的词法分析器设计实现、实验二无符号数的算术四则运算LR语法分析器设计实现,总的实验学时为30课时。本实验还包括扩展实验,供编程能力较强的学生自愿进行。要求每个学生独立完成三个基本实验的设计和编程实现,并形成完整的实验报告。建议使用VC+编程工具。实验一 算术四则运算词法分析程序实现

2、一、实验目的与要求通过编写和调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将字符形式的源程序流转化为一个由各类单词符号组成的流的词法分析方法。二、实验内容选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。输入:由无符号数和+,*,/, ( , ) 构成的算术表达式,如1.5E+2100。输出:对识别出的每一单词均单行输出其(类别码,值)。三、实现方法1、设计识别各类单词的状态转换图描述无符号常数的确定、最小化状态转换图如图1所示。其中编号0,1,2,6代表非终结符号、及, 1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。图1 文

3、法G的状态转换图其中编号0,1,2,6代表非终结符号、及, 1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。在一个程序设计语言中,一般都含有若干类单词符号,为此可首先为每类单词建立一张状态转换图,然后将这些状态转换图合并成一张统一的状态图,即得到了一个有限自动机,再进行必要的确定化和状态数最小化处理,最后据此构造词法分析程序。四则运算算术符号的识别很简单,直接在状态图的0状态分别引出相应标记的矢线至一个新的终态即可。根据自己的习惯,也可以将其转换为状态矩阵形式。2、词法分析程序编写(1)构造单词二元式列表类,实现单词二元式(class,value)的按序存取。(2)构造词法分析器

4、类,实现整数、小数、科学计数法数字的加减乘除括号组成的算数表达式输入串识别生成二元式序列。3、词法分析程序测试用于测试扫描器的实例源文件中应有词法正确的,也应有错误的字符串,对于输入的测试用例的源程序文件,以对照的形式将扫描器的分析结果信息在输出文件中表示出来。4、带有语义处理的词法分析程序编写参考以下表2和程序,对词法分析程序进行扩展,对识别的无符号数进行计值,并将输出形式改为(类别码,值)的二元式形式。四、参考资料实现无符号数识别的参考方法:将设计的状态转换图直接转化为一张程序流程图,并在外层再增加一个以EOF为循环终止条件的while循环,即形成能连续识别各类单词的词法分析程序。各类单词

5、的编码建议如表1。表1 单词的内部编码单词符号类别码(CLASS)单词值(VALUE)无符号数1数字值+2无值3无值*4无值/5无值(6无值)7无值与无符号数状态转换图对应的包含语义处理过程(据此可计算求得无符号数的数字值)的状态矩阵和参考程序如下所示。表2包含语义处理过程的识别无符号数的状态矩阵根据加入语义过程说明的状态转换图直接编写词法分析程序,部分实现代码如下:1 #include 2 #include 3 #include 4 #define LETTER 05 #define DIGIT 16 #define POINT 27 #define OTHER 38 #define POW

6、ER 49 #define PLUS 510 #define MINUS 611 #define UCON 7 /Suppose the class number of unsigned constant is 712 #define ClassOther 20013 #define EndState -114 int w,n,p,e,d;15 int Class; /Used to indicate class of the word16 int ICON;17 float FCON;18 static int CurrentState; /Used to present current s

7、tate, the initial value:01920 int GetChar (void);21 int EXCUTE (int,int);22 int LEX (void);23 int HandleOtherWord (void)24 return ClassOther;25 26 int HandleError (void)27 printf (Error!n); return 0;2829 int GetChar (void)30 31 int c;32 c=getchar ( );33 if(isdigit(c) d=c-0;return DIGIT;34 if (c=.) r

8、eturn POINT;35 if (c=E|c=e) return POWER;36 if (c=+) return PLUS;37 if (c=-) return MINUS;38 return OTHER;39 40 int EXCUTE (int state, int symbol)41 42 switch (state)43 44 case 0:switch (symbol)45 46 case DIGIT: n=0;p=0;e=1;w=d;CurrentState=1;Class=UCON;break;47 case POINT: w=0;n=0;p=0;e=1;CurrentSt

9、ate=3;Class=UCON;break;48 default: HandleOtherWord( );Class=ClassOther;49 CurrentState=EndState;50 51 break;52 case 1:switch (symbol)53 54 case DIGIT: w=w*10+d;break; /CurrentState=155 case POINT: CurrentState=2;break;56 case POWER: CurrentState=4;break;57 default: ICON=w;CurrentState=EndState;58 59

10、 break;60 case 2:switch (symbol)61 62 case DIGIT: n+;w=w*10+d;break;63 case POWER: CurrentState=4;break;64 default: FCON=w*pow(10,e*p-n);CurrentState=EndState;65 66 break;67 case 3:switch (symbol)68 69 case DIGIT: n+;w=w*10+d;CurrentState=2;break;70 default: HandleError( );CurrentState=EndState;71 7

11、2 break;73 case 4:switch (symbol)74 75 case DIGIT: p=p*10+d;CurrentState=6;break;76 case MINUS: e=-1;CurrentState=5;break;77 case PLUS: CurrentState=5;break;78 default: HandleError( );CurrentState=EndState;79 80 break;81 case 5:switch (symbol)82 83 case DIGIT: p=p*10+d;CurrentState=6;break;84 defaul

12、t: HandleError( );CurrentState=EndState;85 86 break;87 case 6:switch (symbol)88 89 case: DIGIT:p=p*10+d;break;90 default: FCON=w*pow(10,e*p-n);CurrentState=EndState;91 92 break;93 94 return CurrentState;95 96 int LEX (void)97 98 int ch;99 CurrentState=0;100 while (CurrentState!=EndState)101 102 ch=G

13、etChar( );103 EXCUTE (CurrentState,ch);104 105 return Class;106 实验二 算符优先分析语法制导翻译程序设计实现一、实验目的与要求通过设计、编制、调试典型的算符优先语法分析程序,实现对实验一所得词法分析程序所提供的单词序列进行语法检查和结构分析,并进行语义处理。二、实验内容选择对各种常见高级程序设计语言都较为通用的语法结构无符号数的算术四则运算作为分析对象,设计并实现一个完整的语法制导翻译程序。输入:由实验一输出的单词类别串,如1,15031,50输出:对于所输入的源程序,如果输入符号串是给定文法定义的合法句子,输出分析过程以及计算结

14、果;如果不是句子,则进行错误提示。三、实现方法1、 首先根据算术四则运算的语法定义,构造算符优先分析表。2、语法分析程序编写设置输入缓冲区、分析栈、算符优先分析表,并根据算符优先分析法编写语法分析程序。3、语法制导翻译程序实现 对以上语法分析器增加简单的语义处理功能,构造算符优先语法制导翻译器,实现算数表达式的语法分析与计算。4、语法制导翻译程序测试用于测试的实例源文件中应有语法正确的,也应有语法错误的符号串,语法正确的输出分析和计算结果,错误的给予错误提示。实验报告要求实验报告主要包括四方面内容:1、实验设计实验采用的文法,状态转换图或矩阵,程序流程设计和每部分的主要功能说明等。2、程序代码

15、实验实现的源程序,要求符合代码行首缩进、单句代码换行、标识符命名合理,并包括必要的注释。3、实验过程问题分析记录记录实验过程中发生的编译错误并分析错误原因和解决的方法及结果,参考表3。表3 实验一中发生的编译错误记录表编号出错时间出错代码错误提示出错原因分析修改方法修改结果1实验一第1课时1 #include error C2143: syntax error : missing ; before constant“1”是示例程序中代码的行号标记,不应出现在源程序中去掉源程序中所有行号标记消除了66个错误4、实验结果记录最终的程序执行结果,至少包括一个正确输入的运行结果和一个错误输入的运行结果。要求每人针对每个实验上交一份实验报告,不接受不完整的实验报告,或者说明与程序或结果不符合的实验报告。of rural drinking water sources, protection of drinking water sources in rural areas by the end of the delimitation of the scope of protection, complete with warning signs, isolating network protection facilities

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