编写中间代码生成程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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、分组实验需包含同组讨论内容。

实验报告成绩(百分制)__________ 实验指导教师签字:__________

相关文档
最新文档