欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

南京工业大学编译原理(张梵老师)期末实验报告(一)

程序员文章站 2022-03-18 13:35:19
...

一 上机实习目的:理解编译程序的构造原理,掌握编译程序的构造方法与技术。通过实习,使学生既加深对编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力。
二、上机实习要求: 在理解编译原理基本思想的基础上,选择一个自己熟悉的程序设计语言,完成编译程序的设计和实现过程。本实习要求学生采用递归下降分析技术,这是一种自顶向下的的编译方法,其基本思想是对语言的每个(或若干个)语法成分编制一个处理子程序,从处理<程序>这个语法成分的子程序开始,在分析过程中调用一系列过程或函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止

  • 本上机实习是为C语言(子集)设计一个编译程序,完成词法分析、语法分析、语义分析等功能,并生成某种机器上的目标代码(汇编语言)或中间代码(四元式)。

三、上机实习步骤
1.阅读《上机实习指导书》。
2.根据设计要求写算法,画程序框图
3.根据框图编写编译程序 4.输入编译程序并上机调试
5.撰写上机实习报告
四、上机实习内容
1、题目:C语言小子集编译程序的实现
2、C语言小子集的文法规则:

  • <程序>::=main(){<分程序>}
  • <分程序>::=<变量说明部分>;<语句部分>
  • <变量说明部分>::=<变量说明><标识符表>
  • <变量说明>::=int<标识符表>::=<标识符表>,<标识符>
  • <标识符表>::=<标识符>
  • <标识符>::=<字母>
  • <标识符>::=<标识符><字母>
  • <标识符>::=<标识符><数字>
  • <语句部分>::=<语句部分>;<语句>|<语句>
  • <语句>::=<赋值语句>|<条件语句>|<循环语句>|
  • <赋值语句>::=<标识符>=<表达式>
  • <条件>::=<表达式><关系运算符><表达式>
  • <表达式>::=<项>|<表达式><加法运算符><项>
  • <项>::=<因子>|<项><乘法运算符><因子>
  • <因子>::=<标识符>|<常量>|(<表达式>)
  • <常量>::=<无符号整数>
  • <无符号整数>::=<数字序列>
  • <数字序列>::=<数字序列><数字>
  • <数字序列>::=<数字>
  • <加法运算符>::=+|-
  • <乘法运算符>::=*|/
  • <关系运算符>::=<|>|!=|>=|<=|==
  • <复合语句>::={<语句部分>}
  • <语句1>::=<语句>|<复合语句>
  • <条件语句>::=if(<条件>)<语句1>else<语句1>
  • <循环语句>::=while(<条件>)do<语句1>
  • <字母>::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
  • <数字>::=0|1|2|3|4|5|6|7|8|9

(1)词法分析扫描源程序,根据词法规则,识别单词,填写相应的表。如果产生词法错误,则显示错误信息、位置,并试图从错误中恢复。简单的恢复方法是忽略该字符(或单词)继续扫描。
(2)语法分析对源程序作语法分析,确定是否属于C语言小子集,同时揭示出程序的内在结构。
(3)语法错误检查根据C语言小子集的文法规则设置检测手段,通过查错子程序或一些查错语句,报告源程序出错位置、性质等,直至整个程序结束为止。
(4)语义分析与目标代码生成在语法分析的基础上,进行语义分析,生成输入源程序的目标代码。输入源程序的目标代码可以建立在一个假想的处理机(虚拟机)上,或者以所学的汇编语言为基础,也可以生成四元式序列。
输入源程序样本:(这只是一个例子,调试时可以任意修改或换其它程序)

main ()
 { int a,b,y,max;
 a=10;  b= ;
 while  (a>0){ b=a+b*a;a=a-1};
 x=a+b;  y=b+b;
 if  (x>y)  max=x  
 else max=y} 

五.每个学生至少应提交机实习报告(白色封面)
要求:
(1)用钢笔或签字笔填写,不能用圆珠笔和铅笔填写。不可以用打印稿。
要求手写工整 2019-2020 第一学期 课程名称:编译原理
(2)内容部分写语法规则
(3)过程部分应包含所写编译程序的设计思想、主要的数据结构、主要的函数功能及相关的流程图, 包括

  1. 设计思想:递归下降的语法分析(指导书+课件上有) LL(1)文法
  2. 画流程图(主函数、主要函数例如词法分析、条件语句或循环语句、表达式的处理),不需要都画
  3. 结构(结构体、数组)及作用 目标代码和源程序的例子(正确的和错误的)
  4. 测试、运行程序的主要结果。所提供的测试结果,应能体现编译程序所具有的检错功能。 调试的问题及解决方法

即过程包括分析的过程,流程图,主函数,词法分析,选择部分语法分析流程
数据结构,种别表,四元式,数组,过程中的变量,查错的结果,正确的结果

(3) 小结部分不写第一页,只写最后半页 ,写收获和体会真实感受,不要大空话,还应包括对以下几个问题的讨论:
①在编写调试编译程序的过程中,遇到了那些关键问题?你是如何解决这些问题的?
②在词法分析、语法分析的过程中,都必须对分析中遇到的错误做出反应,你的编译程序是如何处理所遇到的错误?举例说明。
③通常编译程序可以输出被编译的源程序,假如希望输出优美格式的源程序代码(源程序代码的文本正确缩进,{、}对齐等),你的编译程序是否实现了此功能?如何实现的?

相关标签: 实验报告