实验五用语法制导方式生成中间代码生成器

实验五用语法制导方式生成中间代码生成器

ID:9018342

大小:265.50 KB

页数:8页

时间:2018-04-15

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

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

1、实验5用语法制导方式生成中间代码生成器魏陈强23020092204168一、实验目的掌握语法制导定义和翻译的原理和技术,在语法分析器的基础上,加上语义分析,构造一个中间代码生成器。二、实验内容在实验四生成的语法分析器基础上加入语义动作,将源程序翻译为对应的中间代码序列。三、实验要求1.实验报告中给出采用测试源代码片断,及其对应的三地址码形式(内部表示形式可以自行考虑)。例如,程序片断 对应的中间代码为:四、实验思路在前4次实验的基础上进行中间代码生成的编写,采用linux环境下的lex和yacc工具。首先编写goto.c函数,该函数实现符号表、回填、创建节点、定义节点属性等功能。

2、Lex.l文件无需修改,yacc.y文件中,在每个生成式后加上语法制导翻译,主要是依据truelist和falselist来实现回填功能。编写完后,在yacc.y中以头文件的方式加入goto.c,编译即可。五、实验代码1、lex.l%{%}……letter[A-Za-z]digit[0-9]……%optionnoyywrap%%if{return(IF);}else{return(ELSE);}……"<"

3、"<="

4、">"

5、">="

6、"!="

7、"=="{op_in(&yylval,yytext);return(REL);}……%%2、Yacc.y%{#include"goto.c

8、"#defineYYSTYPEnodeintyyerror();intyyerror(char*msg);externintyylex();codelist*list;%}%tokenBASICNUMBERREALIDTRUEFALSE%tokenINTCHARBOOLFLOAT%tokenREL%tokenIFELSEWHILEDOBREAKSWITCHCASEDEFAULT%tokenORAND%leftOR%leftAND%right'!'%left'+''-'%left'*''/'%rightUMINUS%rightINCDEC%expect1%%program:bloc

9、k{};block:'{'declsstatementlist'}'{};decls:declsdecl{}

10、{};decl:typeID';'{};type:type'['NUMBER']'{}

11、BASIC{};statementlist:statementlistMstatement{backpatch(list,$1.nextlist,$2.instr);$$.nextlist=$3.nextlist;}

12、statement{$$.nextlist=$1.nextlist;};statement:IF'('boolean')'MstatementELSENMstatemen

13、t{backpatch(list,$3.truelist,$5.instr);backpatch(list,$3.falselist,$9.instr);$6.nextlist=merge($6.nextlist,$8.nextlist);$$.nextlist=merge($6.nextlist,$10.nextlist);}

14、IF'('boolean')'Mstatement{backpatch(list,$3.truelist,$5.instr);$$.nextlist=merge($3.falselist,$6.nextlist);}

15、WHILEM'('boolean')

16、'Mstatement{backpatch(list,$7.nextlist,$2.instr);backpatch(list,$4.truelist,$6.instr);$$.nextlist=$4.falselist;gen_goto(list,$2.instr);}

17、DOMstatementMWHILE'('boolean')'M';'{backpatch(list,$3.nextlist,$4.instr);backpatch(list,$7.truelist,$9.instr);$$.nextlist=$7.falselist;gen_goto(list,$2.inst

18、r);}

19、BREAK';'{}

20、'{'statementlist'}'{$$.nextlist=$2.nextlist;}

21、assignment';'{$$.nextlist=NULL;};assignment:ID'='boolean{address(&$1,$1.lexeme);gen_assignment(list,$1,$3);};loc:loc'['boolean']'{}

22、ID{address(&$$,$1.lexeme);};boolean:booleanORMbo

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

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

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