。
实验5 用语法制导方式生成中间代码生成器
一、实验目的
掌握语法制导定义和翻译的原理和技术,在语法分析器的基础上,加上语义分析,构造一个中间代码生成器。 二、实验内容
在实验四生成的语法分析器基础上加入语义动作,将源程序翻译为对应的中间代码序列。
三、实验要求
1. 个人完成,提交实验报告。实验报告必须包括设计的思路,以及测试报告(输入测试例子,输出结果)。
2. 实验报告中给出采用测试源代码片断,及其对应的三地址码形式(内部表示形式可以自行考虑)。
例如,程序片断
-可编辑修改-
。
对应的中间代码为:
四、实验过程
本次实验运用flex和bison工具进行中间代码的生成。并自动生成中间代码。 1. 首先创建一个example文件夹,该文件夹中包含有flex.exe
2. 用文本编译器编辑相应的flex文件mylex.l,此次mylex.l可以在上次实验的l文件上做一些修改,再利用flex将l文件生成相应的lex.yy.c程序,mylex.l的代码如下所示: mylex.l
-可编辑修改-
。
%{
#include \%} delim ws
[ \\t\\n\\r]
{delim}+
[A-Za-z] [0-9]
letter digit id
{letter}({letter}|{digit})*
{digit}+
integer
exponent E[+-]?{integer} number real
{integer}{exponent}?
integer(\\.integer)?{exponent}?
%option noyywrap %%
\{ filloperator(&yylval, yytext); return( REL); } if
{ return( IF ); }
{ return( ELSE ); }
else
while { return( WHILE ); } do { return( DO ); } for { return( FOR ); } switch { return( SWITCH ); }
-可编辑修改-