编写中间代码生成程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称:编译原理项目名称:编写中间代码生成程序姓名:专业:计算机科学与技术班级: 2011级学号:
同组成员
二、实验过程记录1:
(一)实验目的:
在分析理解PL/0编译程序的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。
(二)实验内容:
对PL/0语言作如下功能扩充:
(1)扩充条件语句的功能使其为:if <条件> then <语句>[else <语句>]
(2)增加repeat语句,格式为:repeat <语句> {; <语句>} until <条件>
(三)实验过程
语句语法描述图:
1注:实验过程记录要包含实验目的、实验原理、实验步骤,页码不够可自行添加。
EBNF表示:
<程序>::= <分程序>.
<分程序>::= [<常量说明部分>][<变量说明部分>][<过程说明部分>]<语句> <常量说明部分>::= const<常量定义>{,<常量定义>};
<常量定义>::= <标识符>=<无符号整数>
<无符号整数>::= <数字>{<数字>}
<标识符>::= <字母>{<字母>|<数字>}
<变量说明部分>::= var<标识符>{, <标识符>};
<过程说明部分>::= <过程首部><分程序>{;<过程说明部分>}
<过程首部>::= procedure<标识符>;
<语句> ::= <赋值语句>|<条件语句>|<当循环语句>|<过程调用语句>
<复合语句>|<读语句>|<写语句>|<空>
<赋值语句>::= <标识符> := <表达式>
<表达式> ::= [+|-]<项>{<加法运算符><项>}
<项>::= <因子>{<乘法运算符><因子>}
<因子>::= <标识符>|<无符号整数>| ‘ ( ’ <表达式> ‘ ) ’
<加法运算符>::= +|-
<乘法运算符>::= *|/
<条件>::= <表达式><关系运算符><表达式>|odd<表达式>
程序描述图:
else if(word[i]=="else")
{
*s.top++='e';
*s.top++='s';
*s.top++='l';
*s.top++='e';
i++;
*s.top=*(s.top-6);
*s.top++='T';
printf("T->CS else\n");
}
else if(word[i]=="#")
{
etrue=jsq-1;
efalse=jsq;
printf("分析正确!\n\n\n");
printf("四元式如下:\n");
for(int m=1;m<5;m++)
{
printf("%d,%s,%s,%s,%d\n",sysexp[m].label,sysexp[m].op,sysexp[m].arg1,sysex p[m].arg2,sysexp[m].result);
}
printf("%d\n",jsq);
break;
}
else
{
printf("语法错误!\n");
break;
}
}while(1);
}
实验结果如下所示:
2注:1、实验小结应包含实验所需知识点和实验方法的总结,实验心得体会等。
2、分组实验需包含同组讨论内容。
实验报告成绩(百分制)__________ 实验指导教师签字:__________