编译原理实验报告
更新时间:2024-05-24 12:50:01 阅读量: 综合文库 文档下载
编译原理实验报告
课程名:编译原理实验
任课教师:葛林
姓名:甘言海
学号:020332010027
院系:信息科学与工程学院
专业年级:2010级计算机信息保密
实验一
Cygwin环境的熟悉和lex的使用1
一、 实验目的
熟悉cygwin环境的使用,学习使用lex写简单的词法分析程序,会在cygwin环境下使用flex调试lex写的程序。
二、 实验内容
读懂exam1.l和exam2.l两个例子,使用cygwin下的flex工具将exam1.l和exam2.l编译并调试通过。并且修改exam2.l,在其基础上增加如下记号:
? 左右大小括号:{ } ( )
? 将关系算符改写成C中的形式 ? 分号、赋值号:; = ? 关键字:if else
? 双斜线表示的注释:// ? 算术运算符号:+ - * /
? 将标识符改为可含有下划线,并且可以以下划线开头 ? 将注释内容忽略
三、 实验结果与心得
1. 了解和掌握了flex词法分析器生成工具的使用,lex的语法规则和组织方
式。熟悉了cygwin环境的使用,并能在cygwin下使用flex调试lex程序,利用gcc编译生成的lex.yy.c文件。 2. 在lex定义段使用递归方式的正规定义,简洁有效。
3. 状态的定义和使用,有时候通过状态可有效的解决一些复杂问题,比如
对注释的操作等。不同的状态之间可以使用“BEGIN”进行切换,在不同的状态中对同一正规式表示的句子可以执行不同的动作。 4. 有时候动作可以是一个空语句,这时候相当于过滤掉某些输入。 5. 动作中有返回语句时,返回值应当事先在定义段的第一部分用C语言的
语法进行定义,以便于后面的操作和使用。 6. 在词法规则段,lex总是尽可能匹配较长的句子。当发生冲突时,在词法
规则段中首先出现的正规式将被匹配。 7. 掌握了一些具体的lex元字符的使用方法,可以简化正规定义。 8. 当想要将元字符作为正文字符使用时,可以使用转义字符\\或””。 9. 熟悉了yyin、yyout、yyleng、yytext、yylex()、yywrap()等常用变量和函数
的具体意义和使用方法。
10. 理解了用C语言写的辅助函数对于词法分析的重要作用。这些辅助函数
一方面可以作为语义动作的一部分,另一方面可以为词法分析提供依据。而且可以将main函数作为辅助函数放在这里,当单独使用词法分析器的时候可以在main函数里实现对词法分析器的调度和使用。
实验二
Cygwin环境的熟悉和lex的使用2
一、 实验目的
熟悉cygwin环境的使用,学习使用lex写简单的词法分析程序,会在cygwin环境下使用flex调试lex写的程序。
二、 实验内容
在实验1所改写的程序的基础上增加string记号。string是字符串,如果”出现在字符串中,则必须转义,写成\\”形式;如果\\出现在字符串中,也必须转义,写成\\\\形式。
三、 实验结果与心得
1. 由于字符串以”开始,以”结束,且中间可以包含转义字符\\”,所以不能
简单的将两个引号之间的部分识别为字符串,因为最后一个引号可能是\\”的形式,这将构成一个词法错误。所以有必要设置一个状态用以标志一个字符串即将产生。 2. 由于字符串中不允许含有换行、\\和”,但是可以含有\\\\和\\”,所以可以用
一个正规式来标志\\\\和\\”,比如 example (\\\\\\\\)|(\\\\\\”)。然后再定义一个能匹配除换行、\\和”之外的所有可打印字符的正规式,定义字符串为这两种句子混合组成的所有句子。空格、制表符以及其他转义字符都可放入example的定义中,也可专门用一个正规式来匹配他们,并把该正规式纳入字符串的定义中。 3. 当输入遇到一个”时就进入字符串状态,再遇到一个单独的”就重新进入
初始状态。如果分析器一直处于字符串状态直至输入结束,调用yywrap()返回1,词法分析结束,这时候其实是输入出现了错误。为了检测出这个错误应当在字符串返回的时候检查输入的下一个字符是不是”,如果不是就说明输入出现了词法错误,进行相应的错误处理。对于串中出现了\\或换行的情况,这种方法同样能够检测到词法错误。 4. 如果要求在扫描输入的时候把字符串中的转义字符转变为实际意义,则
需要分开扫描,在分析器进入字符串状态后用不同的正规式来匹配普通字符构成的串和转义字符,并把转义字符转义成其实际代表的字符。这时候由于涉及到字符串操作,需要设置缓存区并用作全局变量。 5. 对于空字符串如果想要产生一个返回值,则需要特殊处理。因为进入字
符串状态后,接着识别一个”就重新返回初始状态。可以设置正规式\\”\\”用来专门识别空字符串,然后在动作中返回一个值用以标志这是一个空字符串。
实验三
词法分析的各类用途1
一、 实验目的
通过实验使学生明白词法分析的作用不仅仅在于写词法分析器,它还有很多其他用途。
二、 实验内容
写一个lex程序,它读入一个文件,将该文件中的所有的单独或连续的一段空白(包括一个或多个空格、制表、换行组成的空白)都替换成一个空格。
三、 实验结果与心得
1. 回顾和熟练了文件的简单操作。
2. 词法分析不仅仅能够用来写词法分析器,而且可以实现输入文件的格式
转换,字符串替换等其他操作。
3. 对空白的识别较为简单,设置一个正规式即可。
4. 每次识别一串空白后就将一个空格写入输出文件,识别到其他内容就原
样写入输出文件,因此应有能够区分空白和其他字符串的正规式,以下是其正规定义:
delim ws
[ \\t \\n]
normal[^ \\t \\n]+
{delim}+
5. 实验结果,输出文件将输入文件中所有的空白串都替换为了一个空格,
其他内容未作修改。
正在阅读:
编译原理实验报告05-24
2006年建设工程项目管理06-29
我喜欢我自己作文600字07-15
《伙伴》说课稿 张欣娜12-13
我是男孩我自豪作文600字06-17
破解农村水利“最后一公里”瓶颈的几点思考04-25
得之我幸,失之我命02-14
我爱她她不喜欢我句子03-06
我美丽,因为我快乐作文600字02-05
2020年银行网点负责人党建述职报告08-31
- Win7 安装MySql图示
- 计算器课程设计报告
- 部编版八年下语文第三单元第六单元古诗文理解默写练习及答案
- 13质量通病防治方案和施工措施
- 土力学试题~~~~
- 公务员打印资料
- 传热膜系数测定实验报告 - 图文
- 新时期煤矿协管安全工作的创新与实践
- 第五章 习题及参考答案
- 220kV架空线路强条执行记录表
- 音乐欣赏读后感
- 高炉
- 劳动教育需要新的时代内涵
- 10建筑地面工程施工质量验收规范GB50209-20021
- 银行会计练习题2答案
- 2013年七年级地理上册知识点复习提纲湘教版
- 人教版三年级语文上册第四单元测试题(A卷)(有答案)
- 营养师第九章练习题
- 湖北省武汉市2018届高三毕业生二月调研 理综化学
- 行业分析2018-2023年中国男性护肤品行业市场发展分析及投资前景
- 编译
- 原理
- 实验
- 报告
- 运营管理入股合作协议
- 国家税收自学考试总复习
- 枸杞甜菜碱含量测定方法的比较研究
- 编译原理课程设计报告
- 2015河南省公务员考试真题-行测卷
- 热电阻和热电偶的区别
- 商业计划书 - 图文
- 姬松茸完整栽培技术总结
- 法制习题-4
- 一年一度的毕业季如期而至,回家还是留在大城市?
- 山楂中黄酮的提取
- 人教版高中物理选修3—1教学计划(新教材)
- 武装警察部队车辆驾驶员理论考试试题库
- 美国留学研究生申请截止日期
- 小学心理健康讲座稿-八篇
- 位移传感器的技术发展现状与发展趋势 - 刘焱 - 图文
- 林下天麻种植专业合作社基地建设可行性研究报告
- 监理细则
- 2016学年高中历史 专题二 第1课 中国古代的科学技术成就教案 人
- 西安交大《电力系统分析Ⅰ》在线作业答案