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 识别的单词: (类别,值) 启动置初值调用GETSYM取单词调用BLOCK过程当前单词是否为源程序结束符'.'? 出错源程序中是否有错误? 调用解释过程INTERPRET 解释执行目标程序打印错误结束 NY YN 保留字:如: BEGIN 、 END 、 IF、 THEN 等运算符: 如: +、-、*、/、:=、#、>= 、<= 等标识符: 用户定义的变
编译原理实验报告PL0 来自淘豆网m.daumloan.com转载请标明出处.