
计算机专业C0编译器实验代码及实验报告。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
题目:C0编译器的设计与实现(10周)C0语言的语法结构如下定义:<程序> → [<变量定义部分>] {<自定义函数定义部分>} <主函数>。 <变量定义部分> → int id {, id}; <自定义函数定义部分> → ( int id | void id) ( )。 <分程序> → void main( )。 <分程序> → { [<变量定义部分>] <语句序列> }。 <语句序列> → <语句> {<语句>}。 <语句> → <条件语句> | <循环语句> | {<语句序列>} | <自定义函数调用语句> | <赋值语句> | <返回语句> | <读语句> | <写语句> | ;。 <条件语句> → if (<表达式>) <语句> [else <语句>]。 <循环语句> → while ( <表达式>) <语句>。 <自定义函数调用语句> → <自定义函数调用>。 <赋值语句> → id = <表达式>;。 <返回语句> → return [( <表达式> )]; 。 <读语句> → scanf ( id ); 。 <写语句> → printf ( [ <表达式>] ); 。 <表达式> → [+|-] <项> { (+|-) <项>}。 <项> → <因子>{(*|/) <因子>}。 <因子> → id | ( <表达式>) | num | <自定义函数调用>; 。 其中,id代表标识符,num代表整数,其含义及构成方式与C语言保持一致;C0源程序中的变量需先进行定义,随后才可使用,其作用域和生存期与C语言完全相同;此外,自定义函数的调用可以发生在定义之前(即调用出现在定义之前)。根据上述提供的C0文法以及详细说明,并结合假定的栈式指令系统,采用递归下降分析法设计并实现该C0语言的编译器,目标是生成栈式目标代码;同时,编写栈式指令系统的解释执行程序,用于输出目标代码的执行过程和结果。 假定的栈式指令系统包含以下指令:LIT 0 a 将常数值取到栈顶,其中a为常数值;LOD t a 将变量值取到栈顶,其中a为相对地址且t为层差;STO t a 将栈顶内容送入某变量单元中,其中a为相对地址且t为层差;CAL 0 a 调用函数,a为函数地址;INT 0 a 在运行栈中为被调用的过程开辟a个单元的数据区;JMP 0 a 无条件跳转至a地址;JPC 0 a 条件跳转,当栈顶值为0时跳转至a地址,否则继续执行;ADD 0 0 次栈顶与栈顶相加、退两个元素并进栈;SUB 0 0 次栈顶减去栈顶、退两个元素并进栈;MUL 0 0 次栈顶乘以栈顶、退两个元素并进栈;DIV 0 0 次栈顶除以栈顶、退两个元素并进栈;RED 0 0 从命令行读入一个输入置于栈顶;WRT 0 0 栈顶值输出至屏幕并换行;RET 0 0 函数调用结束后返回调用点并退栈。
全部评论 (0)


