文档详情

pl0扩展编译器_设计文档.docx

发布:2017-01-27约1.5万字共28页下载文档
文本预览下载声明
?《编译技术》课程设计文 档学号: 姓名: 2013年 11月 15日目录一.需求说明21.文法说明22.目标代码说明11二.详细设计121.程序结构122.类/方法/函数功能133.调用依赖关系144.符号表管理方案155.存储分配方案176. 解释执行程序*177. 出错处理22三.操作说明231.运行环境232.操作步骤23四.测试报告241.测试程序1242.测试程序2243. 测试程序3254. 测试程序4255. 测试程序5(以上为正确程序)256. 测试程序6(以下是错误程序)257. 测试程序7268. 测试程序8269. 测试程序92610. 测试程序1026五.总结感想27图目录picture 14picture 25picture 36picture 47picture 58picture 614picture 716一.需求说明1.文法说明1)获取的原文法:程序 ::= 分程序.分程序 ::= [常量说明部分][变量说明部分]{[过程说明部分]| [函数说明部分]}复合语句常量说明部分 ::= const常量定义{,常量定义};常量定义 ::= 标识符= 常量常量 ::= [+| -] (无符号整数| 无符号实数)|字符字符 ::= 字母 | 数字字符串 ::= {十进制编码为32,33,35-126的ASCII字符}无符号整数 ::= 数字{数字} 无符号实数 ::= 无符号整数.无符号整数标识符 ::= 字母{字母|数字}变量说明部分 ::= var 变量说明 ; {变量说明;}变量说明 ::= 标识符{, 标识符} : 类型 类型 ::= 基本类型 | array [无符号整数] of 基本类型基本类型 ::= integer | char | real过程说明部分 ::= 过程首部分程序{;过程首部分程序};函数说明部分 ::= 函数首部分程序{;函数首部分程序};过程首部 ::= procedure标识符([形式参数表]);函数首部 ::= function 标识符([形式参数表]): 基本类型;形式参数表 ::= 形式参数段{; 形式参数段}形式参数段 ::= [var]标识符{, 标识符}: 基本类型语句 ::= 赋值语句|条件语句|情况语句|过程调用语句|复合语句|读语句|写语句|for循环语句|空赋值语句 ::= 标识符 := 表达式| 函数标识符 := 表达式|标识符[表达式]:= 表达式函数标识符 ::= 标识符 表达式 ::= [+|-]项{加法运算符项}项 ::= 因子{乘法运算符因子}因子 ::=标识符|无符号整数| 无符号实数|(表达式) | 函数调用语句|标识符[表达式]函数调用语句 ::=标识符([实在参数表])实在参数表 ::= 实在参数 {, 实在参数}实在参数 ::=表达式加法运算符 ::= +|-乘法运算符 ::= *|/条件 ::= 表达式关系运算符表达式关系运算符 ::= |=||= |=|条件语句 ::= if条件then语句 | if条件then语句else语句情况语句 ::= case 表达式 of 情况表元素{; 情况表元素}end情况表元素 ::= 情况常量表 : 语句情况常量表 ::= 常量{, 常量}for循环语句 ::= for 标识符 := 表达式 (downto | to) 表达式 do 语句 过程调用语句 ::= 标识符([实在参数表])复合语句 ::= begin语句{; 语句}end读语句 ::= read(标识符{,标识符})写语句 ::= write( 字符串,表达式 )|write( 字符串)|write(表达式)字母 := a|b|c|d…x|y|z |A|B…|Z数字 ::= 0|1|2|3…8|92)由于原文法不存在左递归,因此不对文法进行改写。3)文法解读程序设计图1picture 1分程序设计图2picture 2语句设计图3picture 3因子、项、表达式设计图4picture 4其他语法设计图5picture 5程序::= 分程序.分析:程序的主体是分程序,“.”相当于结束符号,告诉编译器需要编译的程序到此为止;范例:const variable=4; .分程序 ::= [常量说明部分][变量说明部分]{[过程说明部分]| [函数说明部分]}复合语句常量说明部分 ::= const常量定义{,常量定义};常量定义 ::= 标识符= 常量常量 ::= [+| -] (无符号整数| 无符号实数)|字符变量说明部分 ::= var
显示全部
相似文档