PL/0语言编译器分析实验报告学院:计算机学院学号:1112057195姓名:夏建鑫课程名称:编译原理一、实验目的通过阅读与解析一个实际编译器(PL/0语言编译器)的源代码,加深对编译阶段(包括词法分析、语法分析、语义分析、中间代码生成等)和编译系统软件结构的理解,并达到提高学生学习兴趣的目的。二、实验要求(1)要求掌握基本的程序设计技巧(C语言)和阅读较大规模程序源代码的能力;(2)理解并掌握编译过程的逻辑阶段及各逻辑阶段的功能;(3)要求能把握整个系统(PL/0语言编译器)的体系结构,各功能模块的功能,各模块之间的接口;(4)要求能总结出实现编译过程各逻辑阶段功能采用的具体算法与技术。三、实验步骤(1)根据PL/0语言的语法图,理解PL/0语言各级语法单位的结构,掌握PL/0语言合法程序的结构;(2)从总体上分析整个系统的体系结构、各功能模块的功能、各模块之间的调用关系、各模块之间的接口;(3)详细分析各子程序和函数的代码结构、程序流程、采用的主要算法及实现的功能;(4)撰写分析报告,主要内容包括系统结构框图、模块接口、主要算法、各模块程序流程图等。四、报告内容PL/0语言语法的BNF表示-1,对语法描述图的解析<程序>→<程序体>.<程序体>→[<常量说明部分>][变量说明部分>][<过程说明部分>]<语句><常量说明部分>→const<常量定义>{,<常量定义>};<常量定义>→<标识符>=<无符号整数><无符号整数>→<数字>{<数字>}<变量说明部分>→var<标识符>{,<标识符>};<标识符>→<字母>{<字母>|<数字>}<过程说明部分>→<过程首部><程序体>{;<过程说明部分>};<过程首部>→procedure<标识符>;<语句>→<赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<复合语句><赋值语句>→<标识符>:=<表达式><复合语句>→begin<语句序列>end<语句序列>→<语句>{;<语句>}<条件>→<表达式><关系运算符><表达式>|odd<表达式><表达式>→[+|-]<项>{<加法运算符><项>}<项>→<因子>{<乘法运算符><因子>}<因子>→<标识符>|<无符号整数>|'('<表达式>')'<加法运算符>→+|-<乘法运算符>→*|/<关系运算符>→=|<>|<|<=|>|>=<条件语句>→if<条件>then<语句><过程调用语句>→call<标识符><当型循环语句>→while<条件>do<语句><字母>→a|b|...|x|y|z<数字>→0|1|2|...|8|9编译程序总体流程图Pl/0词法分析程序Getsym识别的单词:(类别,值)保留字:如:BEGIN、END、IF、THEN等运算符:如:+、-、*、/、:=、#、>=、<=等标识符:用户定义的变量名、常数名、过程名常数:如:10、25、100等整数界符:如:‘,’、‘.’、‘;’、‘(’、‘)’等读字符子程序(getch)〈表达式〉的递归子程序实现procedureexpr;begin ifsymin[plus,minus]then begingetsym;term; end elseterm; whilesymin[plus,minus]do begin getsym;term; end end;〈因子〉∷=〈标识符〉
编译原理实验报告PL0 来自淘豆网m.daumloan.com转载请标明出处.