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

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值