实验五-编译-用语法制导方式生成中间代码生成器.doc

实验五-编译-用语法制导方式生成中间代码生成器.doc

ID:55410896

大小:192.00 KB

页数:13页

时间:2020-05-12

实验五-编译-用语法制导方式生成中间代码生成器.doc_第1页
实验五-编译-用语法制导方式生成中间代码生成器.doc_第2页
实验五-编译-用语法制导方式生成中间代码生成器.doc_第3页
实验五-编译-用语法制导方式生成中间代码生成器.doc_第4页
实验五-编译-用语法制导方式生成中间代码生成器.doc_第5页
资源描述:

《实验五-编译-用语法制导方式生成中间代码生成器.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验5用语法制导方式生成中间代码生成器一、实验目的掌握语法制导定义和翻译的原理和技术,在语法分析器的基础上,加上语义分析,构造一个中间代码生成器。二、实验内容在实验四生成的语法分析器基础上加入语义动作,将源程序翻译为对应的中间代码序列。三、实验要求1.个人完成,提交实验报告。实验报告必须包括设计的思路,以及测试报告(输入测试例子,输出结果)。2.实验报告中给出采用测试源代码片断,及其对应的三地址码形式(内部表示形式可以自行考虑)。例如,程序片断 对应的中间代码为:四、实验过程本次实验运用flex和bison工具进行中间代码的生成。并自动生成中间代码。1.首先创建一个e

2、xample文件夹,该文件夹中包含有flex.exe2.用文本编译器编辑相应的flex文件mylex.l,此次mylex.l可以在上次实验的l文件上做一些修改,再利用flex将l文件生成相应的lex.yy.c程序,mylex.l的代码如下所示:mylex.l%{#include"myyacc.tab.h"%}delim[tr]ws{delim}+letter[A-Za-z]digit[0-9]id{letter}({letter}

3、{digit})*integer{digit}+exponentE[+-]?{integer}number{integer}{ex

4、ponent}?realinteger(.integer)?{exponent}?%optionnoyywrap%%"<"

5、"<="

6、">"

7、">="

8、"!="

9、"=="{filloperator(&yylval,yytext);return(REL);}if{return(IF);}else{return(ELSE);}while{return(WHILE);}do{return(DO);}for{return(FOR);}switch{return(SWITCH);}case{return(CASE);}default{return(DEFAULT);}brea

10、k{return(BREAK);}true{return(TRUE);}false{return(FALSE);}int{return(INT);}long{return(LONG);}char{return(CHAR);}bool{return(BOOL);}float{return(FLOAT);}double{return(DOUBLE);}"&&"{return(AND);}"

11、

12、"{return(OR);}"!"{return('!');}"++"{return(INC);}"--"{return(DEC);}"+"{return('+');}"-"{ret

13、urn('-');}"*"{return('*');}"/"{return('/');}"="{return('=');}"{"{return('{');}"}"{return('}');}"["{return('[');}"]"{return(']');}"("{return('(');}")"{return(')');}";"{return(';');}{ws}{}{id}{filllexeme(&yylval,yytext);return(ID);}{number}{filllexeme(&yylval,yytext);return(NUMBER);}{real

14、}{filllexeme(&yylval,yytext);return(REAL);}%%在代码中,先定义正则定义,即对letter,digit,专用符号,空格进行声明;接着在转换规则中,定义一些识别规则的代码。完成词法分析后,就可以将获取的每一个词素用于语法分析器使用。将mylex.l与myyacc.y相结合的方法是在每获得一个词素,则用return语句返回,即如果获得的是if,则return(if),并且在头文件中加入#include"myYacc.tab.h",则在myyacc中定义的类型在mylex中可利用,否则会出现返回的单元未定义的错误。1.用文本编译器编

15、辑相应的bison文件myyacc.y,myyacc.y文件中,在每个生成式后加上语法制导翻译,主要是依据truelist和falselist来实现回填功能。编写完后,在myyacc.y中以头文件的方式加入自己编写的myyacc.h文件,编译即可。Myyacc.y的代码如下所示:Myyacc.y%{#include"myyacc.h"#defineYYSTYPEnode#include"myyacc.tab.h"intyyerror();intyyerror(char*msg);externintyylex();codelist*list;%}%to

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。