编译原理——实验壹——TINY语言的词法分析

一、 实验目的

  1. 构造tiny语言的词法分析器(扫描器),要求利用第三方的lex工具进行构造。构造出的扫描器,能够读入tiny语言的示例代码,分解成token输出。
  2. 掌握使用lex工具
  3. 掌握构造词法分析器
  4. 掌握lex的输入文件的编写

二、 实验设计
掌握词法分析器的构造和使用,学会使用 lex 工具来构造词法分析程序。
1.选择教材《程序清单2-3 TINY语言中的样本程序》作为输入
在这里插入图片描述
2.选择教材中《程序清单2-4》作为输出并做一些输入输出文件格式的改进
在这里插入图片描述

3.准备好了实验所需工具
4.程序设计
4-1:将[0-9]+作为digit 匹配数字
4-2:将read |if| then| repeat | until |write | end 作为keyword 匹配关键字
4-3:将[a-zA-Z]+作为letter 匹配单词字母
4-4:将{[^}]} 作为comment匹配注释
4-5;将":="|"="|"+"|"-"|"
"|"/"|">"|"<“作为operator 匹配操作符
4-6:将[” “|\t|\n]+ 作为ignore匹配空格、换行、制表符 进行忽略
4-7:将[”,"|";"]+ 作为other 正常输出
4-8:将匹配到的token,根据书本给出的格式进行输出到屏幕上
三、 内容和步骤
1代码:
2、步骤:
(1)在一个空文件夹内建一个print.l 文件,并键入代码
在这里插入图片描述

(2)使用flex命令,对print.l文件进行编译。生成lex.yy.c文件
在这里插入图片描述
在这里插入图片描述

(3)使用dev编译器编译lex.yy.c文件,生成.exe文件。
在这里插入图片描述

3结果:
(1)输入
在这里插入图片描述

(2)过程中
在这里插入图片描述

(3)、输出
在这里插入图片描述

四、 实验结论:
1 理论基础
(1) 关于LEX工具的使用方法
(2) 掌握LEX输入文件的格式
LEX输入文件由3个部分组成:定义集、规则集、以及辅助程序集或用户程序集。这3个部分由双百分号分开
(3)了解词法分析器的内部工作原理
(4)了解TINY语言的基本关键字和结构

TINY 的单词记号分为三种典型类型:保留字、特殊符号和“其他”单词。保留字一共 8 个,特殊符号包括运算符和界符:分别是四种基本的整数运算符号,两种比较符号(等号和小于),以及括号、分号和赋值号。除赋值号是两个字符的长度以外,其余均为一个字符 TINY 的标识符是一个或多个字母的序列。数是一个或多个数字的序列。除了单词之外,TINY 还要遵循以下词法规则:注释应放在花括号{…}中,且不可嵌套;代码应是自由格式;空白符由空格、制表位和新行组成。

2、分析和总结
问题:编译lex.yy.c文件时候想使用dos命令发现在windows环境下难以完成,于是下载了devc++编译器完成该部分任务。
结果:功能良好,可以完成预定的要求。
总结:通过这次实验,我对词法分析器有了进一步的了解,可以把理论知识应用于实验中。通过这次语义分析的实验, 我对高级语言的学习有了更深的认识 ,了解得更透彻。
3、对工具的评价
作为lex&yacc安装的集合,unxutils挺方便的,可以满足基本要求。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值