实验五+中间代码生成器

实验五+中间代码生成器

ID:38698990

大小:149.50 KB

页数:5页

时间:2019-06-17

实验五+中间代码生成器_第1页
实验五+中间代码生成器_第2页
实验五+中间代码生成器_第3页
实验五+中间代码生成器_第4页
实验五+中间代码生成器_第5页
资源描述:

《实验五+中间代码生成器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验5中间代码生成器一、实验目的掌握语法制导定义和翻译的原理和技术,在语法分析器的基础上,加上语义分析,构造一个中间代码生成器。二、实验内容在实验四用Yacc生成的语法分析器基础上加入语义动作,编写一个中间代码生成程序。1.文法(见教材附录A.1,p394)program→blockblock→{declsstmts}decls→declsdecl

2、edecl→typeid;type→type[num]//数组可以不做

3、basic//四种基本数据类型int

4、float

5、char

6、boolstmts→ stmtsstmt

7、estmt→i

8、d=expr;

9、if(bool)stmt

10、if(bool)stmtelsestmt

11、while(bool)stmt

12、dostmtwhile(bool);

13、break;//break可以不做

14、blockbool→bool

15、

16、join

17、joinjoin→join&&equality

18、equalityequality→equality==rel

19、equality!=rel

20、relrel→expr

21、expr<=expr

22、expr>expr

23、expr>=expr

24、exprexpr→expr+term

25、expr-term

26、termter

27、m→term*unary

28、term/unary

29、unaryunary→!unary

30、-unary

31、factorfactor→(expr)

32、id

33、num 2.中间代码的形式见教材p221~222,若有必要,可以适当扩展(加以说明)。三、实验过程3.1符号表的定义和相关函数structSymbolElemstructSymbolListSymbolListCreateSymbolList(SymbolListPrevList,intStartAddr)/*创建并返回一个新的符号表(SymbolList就是书上的Env),PrevList是

34、其的上一层符号表*/voidDestroySymbolList(SymbolListList)structSymbolElem*LookUpSymbolList(SymbolListList,char*IdName)/*在符号表List中查找是否存在标识符IdName,如果存在,则返回该结点指针,否则返回空*/structSymbolElem*LookUpAllSymbolList(SymbolListList,char*IdName)/*从符号表List开始并不断地往上一层符号表中查找是否存在标识符IdName,如果存在,则返回该结

35、点指针,否则返回空*/structSymbolElem*AddToSymbolList(SymbolListList,char*IdName,intIdType,intWidth)/*创建一个新的符号结点,并添加到符号表中,而后返回该结点指针*/3.2常数表的定义和相关函数unionConstVal/*存放一个常数*/structConstElem/*常量表*/structConstList/*创建并返回常量表*/voidCreateConstList(intStartAddr)voidDestroyConstList(void)/*

36、在常量表ConstList中查找是否存在常量,如果存在,则返回该结点指针,否则返回空*/structConstElem*LookUpConstList(intConstType,unionConstValConstValue,intWidth)/*创建一个新的常数结点,并添加到常数表中,而后返回该结点指针*/structConstElem*AddToConstList(char*Str,intConstType,unionConstValConstValue,intWidth)3.3四元式的定义和函数/*四元式数据结构*/struct

37、Quadruple/*四元式表*/structQuadTablevoidCreateQuadTable(intStartAddr)voidDestroyQuadTable(void)/*当Arg1是变量或临时变量时,Arg1Name是该变量的名称,用于演示时使用,其余参数类同*/intGen(intOp,intArg1,intArg2,intArg3,char*Arg1Name,char*Arg2Name,char*Arg3Name)/*把四元式所对应的三地址代码写入到文件中*/voidWriteQuadTableToFile(con

38、stchar*FileName)四、实验结果源程序片断运行状态图运行结果五、心得体会本次实验很难,做了很久都没做出来。不过在这个过程中,加深了我对中间代码生成的了解。最近在参考网上资料和同学代码的情况下做出来了。

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

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

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