语义分析与中间代码生成_第1页
语义分析与中间代码生成_第2页
语义分析与中间代码生成_第3页
语义分析与中间代码生成_第4页
语义分析与中间代码生成_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

实验内容:可选择LL1分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法制导翻译过程。文法GE如下所示:EE+T | E-T | TTT*F | T/F | FFPF | PP(E) | i要求构造出符合语义分析要求的属性文法描述,并在完成实验二(语法分析)的基础上,进行语义分析程序设计,最终输出与测试用例等价的四元式中间代码序列。实验目的:1掌握语法制导翻译的基本功能。2巩固对语义分析的基本功能和原理的认识。3能够基于语法制导翻译的知识进行语义分析。4掌握类高级语言中基本语句所对应的语义动作。5理解并处理语义分析中的异常和错误。实验要求:1在实验二的基础上,实现语法制导翻译功能,输出翻译后所得四元式序列;2要求详细描述所选分析方法进行制导翻译的设计过程;3完成对所设计分析器的功能测试,并给出测试数据和实验结果;4为增加程序可读性,请在程序中进行适当注释说明;5整理上机步骤,总结经验和体会;6认真完成并按时提交实验报告。开始词法分析中间代码语法、语义分析出错处理语法、语义分析中间代码生成结束实验步骤:-1语义子程序为:(会生成四元式的部分:)(1) Pi (2) EE+T emit(+,E.place,T.place,E.place);(3) EE-T emit(-,E.place,T.place,E.place);(4) TT*F emit(*,T.place,F.place,T.place);(5) TT/F emit(/,T.place,F.place,T.place);(6) FPFemit(,P.place,F.place,F.place);(7) P(E) -2源代码:#include#include #include #includeusing namespace std;int table1010 = 1, 1, -1, -1, -1, -1, -1, 1, 1 , 1, 1, -1, -1, -1, -1, -1, 1, 1 , 1, 1, 1, 1, -1, -1, -1, 1, 1 , 1, 1, 1, 1, -1, -1, -1, 1, 1 , 1, 1, 1, 1, -1, -1, -1, 1, 1 , 1, 1, 1, 1, 1, 2, 2, 1, 1 , -1, -1, -1, -1, -1, -1, -1, 0, 1 , 1, 1, 1, 1, 1, 2, 2, 1, 1 , -1, -1, -1, -1, -1, -1, -1, 2, 0 ;/1表示优先,-1表示落后,0表示同等,2表示不具可比性char stSymbol100;/ 定义栈,用来存储终结符char stSemantic100;/语义栈int top = -1 ;/栈顶指针int i = 0;static int count = 75;/新建的符号的小标/ 判断是否为终结符int IsVT(char str) if (str=+ | str=- | str=* | str=/ | str= | str=( | str=i | str=) | str=# )return 1;return 0;/ 操作符判断int IsOpe(char str) if (str=+ | str=- | str=* | str=/ | str=)return 1;return 0;/ 有字符判断该字符在table数组中的位置int Index(char str) switch (str) case +:return 0;case -:return 1;case *:return 2;case /:return 3;case :return 4;case i:return 5;case (:return 6;case ):return 7;case #:return 8;return 0;int Compare(char top, char input) int i = Index(top);int j = Index(input);return tableij;/动作分析string Action(char vt,char &s1,char &s2,int i,string &s3)string str;switch(vt)case i:s1 = F;s2 = stSemantici;s3 = 1;return ;case +:s1 = E;s2 = (char)count+;s3 = 2;str = (+,;str += stSemantici-1;str += ,;str += stSemantici+1;str += ,;str += s2;str += );return str;case -:s1 = E;s2 = (char)count+;s3 = 3;str = (-,;str += stSemantici-1;str += ,;str += stSemantici+1;str += ,;str += s2;str += );return str;case *:s1 = T;s3 = 4;s2 = count+;str = (*,;str += stSemantici-1;str += ,;str += stSemantici+1;str += ,;str += s2;str += );return str;case /:s1 = T; s2 = (char)count+;s3 = 5;str = (/,;str += stSemantici-1;str += ,;str += stSemantici+1;str += ,;str += s2;str += );return str;case :s1 = F;s2 = (char)count+;s3 = 6;str = (,;str += stSemantici-1;str += ,;str += stSemantici+1;str += ,;str += s2;str += );return str;case ):s1 = stSymboltop-1;s2 = stSemantici-1;s3 = 7;return ;case #:return ;return ;void Fenxi(char* input)cout*生成四元式的过程*endl;cout输入串tt 符号栈t 语义栈t 生成四元式tendl;char ch;char subInput;do string sbSym,sbSem,sbTag3;char sbTag1,sbTag2;if (IsVT(stSymboltop) = 1)i = top ;else i = top-1;/栈中相连的必有一个非终结符if(*input = #)ch = *input ;elsesubInput = input0;/输入符的首字符if(IsOpe(subInput) = 0)/不是操作符ch = i;elsech = subInput;subInput = _;if (Compare(stSymboli, ch) = 0 | Compare(stSymboli, ch) = -1)for(int j=0; j= top; j+)sbSym += stSymbolj;sbSem += stSemanticj;if(ch != #)coutsetw(10)inputsetw(12)sbSymsetw(16)sbSemendl;stSymbol+top = ch;stSemantictop = subInput;input = input+;continue;else/只剩下#时coutsetw(10)inputsetw(12)sbSymsetw(16)sbSemendl;return;else if(Compare(stSymboltop, ch) = 2)cout非法语句!endl;return;if (Compare(stSymboli, ch) = 1) char com;int t = i;do /找出最左素短语com = stSymbolt;if (IsVT(stSymbolt-1) = 1)t = t -1;else t = t -2; while (Compare(stSymbolt, com) = 0);for(int j=0; j= top; j+)sbSym += stSymbolj;/栈中内容sbSem += stSemanticj;string temp;temp = Action(stSymboli,sbTag1,sbTag2,i,sbTag3);coutsetw(10)inputsetw(12)sbSymsetw(16)sbSemsetw(16)temp 0);void main()/初始化栈stSymb

温馨提示

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

评论

0/150

提交评论