编译原理上机实验
更新时间:2023-10-13 05:33:01 阅读量: 综合文库 文档下载
实验1简单的词法分析子程序
【实验目的】
? 理解词法分析在编译程序中的作用
? 初步了解和掌握词法分析程序的实现方法和技术 【实验内容】
1. 编写程序,输入一串字符,判断该字符串是否为合法标识符或合法整型常量。 2. 无符号数的算术四则运算中的各类单词的识别。
输入:由无符号数、+、-、*、/、(、)构成的算术表达式。 输出:对识别出的每一单词均单行输出。 如,输入:
8*2.5-1.0e2
则,输出:
8 * 2.5 -
1.0e2
描述无符号数的确定的、最小化的状态转换图如图1所示。其中编号1,2和6为终态,分别代表整数、小数和科学计数的识别结束状态。
图1 文法G[<无符号数>]的状态转换图
实验2词法分析程序设计
【实验目的】
? 理解词法分析中的正规式和自动机 ? 掌握词法分析程序的实现方法和技术 【实验内容】
某一高级程序设计语言的部分语言子集定义如下: (1)关键字:
for if then else while do (所有关键字都是小写) (2)运算符和分隔符:
+ - * / : = <><= <>>= == ; ( ) #
(3)其他标识符(ID)和整型常数(NUM),通过以下正规式定义:
ID=letter(letter|digit)* NUM=digit·digit*
(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、分隔符和关键字,词法分析阶段通常被忽略。 各种词法单元对应的词法记号如下: 词法单元 for if then else while do ID NUM 词法记号 1 2 3 4 5 6 10 11 词法单元 + - * / : = < > 词法记号 13 14 15 16 17 18 20 21 词法单元 <= <> >= == ; ( ) # 词法记号 22 23 24 25 26 27 28 0 编写程序,实现词法分析功能。 输入:源程序
输出:二元组(词法记号,属性值/其在符号表中的位置)构成的序列。 例如:输入源程序
x=5;
if (x>0)then
x=2*x+1/3; else
x=2/x; #
(# 表示输入结束)
经词法分析后输出如下序列:
(10,x) (18,=) (11,5) (26,;) (2,if) (27,()
…
说明:关键字表的初值。
关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符,查关键字表。如能查到匹配的单词,则该单词的关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下: char *keyword[6]={”for”,”if”,”then”,”else”,”while”,”do”};
图2-1主程序示意图
变量初始化 忽略空格
是 是否文件结束? 否 字母 数字 其他
拼字符串 运算符、 符号
界符等符号 拼数 否 是否关键字? 对不同符号给报错 出相应的syn值 syn=10 是 syn为对应关键字的单syn=11 词种别码(词法记号) 返回 返回 图2-2 扫描子程序主要部分流程图
实验3语法分析程序设计
【实验目的】
? 理解语法分析在编译程序中的作用
? 在词法分析的基础上进行语法检查和结构分析 ? 掌握语法分析程序的实现方法和技术 【实验内容】
某一高级程序设计语言的部分语法规则用扩充的BNF表示如下: ⑴ <程序>::=begin<语句串>end ⑵ <语句串>::=<语句>{;<语句>} ⑶ <语句>::=<赋值语句>
⑷ <赋值语句>::=ID=<表达式>
⑸ <表达式>::=<项>{+<项> | -<项>} ⑹ <项>::=<因子>{*<因子> | /<因子>} ⑺ <因子>::=ID | NUM | (<表达式>)
要求:输入单词串,以“#”结束,如果是文法正确的句子,则输出“success”,否则输出“error”。 例如:
输入 begin a=9; x=2*3; b=a+x end # 输出 success! 输入 x=a+b*c end # 输出 error!
实验4语义分析及中间代码生成程序设计
【实验目的】 ? ? ? ?
理解语义分析及中间代码生成在编译程序中的作用 在语法分析的基础上进行语义检查并生成中间代码 加深对语法制导翻译的理解
掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法
【实验内容】
某一高级程序设计语言的部分词法、语法规则同以上实验,在实验3语法分析程序基础上,设计和实现该语言的语义分析程序。
要求:输入是一段语句串,输出为三地址指令形式的四元式代码 例如:
对于语句串
Begin a=2+3*4; x=(a+b)/c end # 输出的三地址码为:
t1 = 3*4 t2 = 2+t1 a = t2 t3 = a + b t4 = t3/c x = t4
实验4语义分析及中间代码生成程序设计
【实验目的】 ? ? ? ?
理解语义分析及中间代码生成在编译程序中的作用 在语法分析的基础上进行语义检查并生成中间代码 加深对语法制导翻译的理解
掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法
【实验内容】
某一高级程序设计语言的部分词法、语法规则同以上实验,在实验3语法分析程序基础上,设计和实现该语言的语义分析程序。
要求:输入是一段语句串,输出为三地址指令形式的四元式代码 例如:
对于语句串
Begin a=2+3*4; x=(a+b)/c end # 输出的三地址码为:
t1 = 3*4 t2 = 2+t1 a = t2 t3 = a + b t4 = t3/c x = t4
正在阅读:
编译原理上机实验10-13
日落时的海景作文600字06-24
2022年4月江西省九所重点中学2022届高三毕业班联考文综地理试题(04-11
春夏秋冬节日英语报:猜灯谜02-12
面 相 秘 法10-19
医院医疗管理部分流程图06-01
关于学校通知03-31
《像山那样思考》教学设计 王哲07-23
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 上机
- 编译
- 原理
- 实验
- Test bank International Finance MCQ(word)Chap 13
- 谐波测试仪的使用 - 图文
- 微观经济学小测验
- 农药学概论
- 思修大学生诚信社会实践调查报告
- 2015年安徽教师招考《小学教育综合知识》预测试卷
- 浙江省名校协作体2018届高三上学期联考地理试题 - 图文
- 四级英语模板习题
- 8儒教、佛教与道教 - 图文
- 税法
- 亚信联创4A白皮书
- 山东省泰安市岱岳区2018年中考物理二模试卷(解析版)
- 微波测量实验实验报告4 - 图文
- 实验一讲义 固态及液态样品的红外光谱分析
- T10 雷达与卫星气象学
- 第3章+Word2003(实验题)
- 自考00065 国民经济统计概论 练习题08
- 2019届湖南省邵阳市高三第一次大联考(理科)数学试卷含答案及解析
- 2019年高考语文一轮复习浙江专用教师用书第四部分 第6讲学会议论文分论点的设置方法
- 2015年7月代维认证考试-有线-A卷-V2