实验一 TINY语言的词法分析

实验目的
构造tiny语言的词法分析器(扫描器),要求利用第三方的lex工具进行构造。实验结果:构造出的扫描器,能够读入教材样例中给出的tiny语言的示例代码,分解成token输出。
Experimental Requirement
Build the lexical parser (a scanner) of TINY language, using the Lex tool of third party. The experimental result Scanner can receive the sample program of Tiny language, and output is a sequence of tokes that are defined by regular expression.

预习要求:
Preview requirements:
1.查阅各种专业文献,针对任意二种现代程序设计语言编译器的词法分析技术,找出各自的标志性的特征点,并加以比较分析和比较,指出其优缺点,并试图给出自已的结论。
Referring to professional literatures, aiming at the lexical analysis technology of any two modern programming language compilers, finds out their respective features, compares them, points out their advantages and disadvantages, and tries to give your Evaluation and conclusions.

词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。
组织输入、扫描、分析、输出。
对输入的每个单词或符号进行分析归类,主要分析每个词的词性如属于关键词,运算符,变量名,接收字符串形式的源程序,按照源程序输入的次序依次扫描源程序,在扫描的同时根据语言的词法规则识别出具有独立意义的单词,并产生与源程序等价的属性字(Token)流
lex是一个产生词法分析器, Lex常常与yacc语法分析器产生程序。
Lex读进一个代表词法分析器规则的输入字符串流,然后输出以C语言实做的词法分析器源代码。有名的Lex公开源代码版本是flex,代表"快速的词法分析器"。因此优点在于速度快,但是必然会失去部分稳定性。
YACC等工具自底向上

JavaCC 是一个词法分析生成器和语法分析生成器。 词法分析和语法分析是处理输入字符序列的软件构件, 编译器和解释器协同词法分析和语法分析来“解密” 程序文件。
JavaCC产生自顶向下的语法分析器。
词法规范(如正则表达式、字符串等)和语法规范(BNF范式)书写在同一个文件里。这使得语法易读和易维护。
JavaCC可以在任何java平台V1.1以后的版本上运行。它可以不需要特别的移植工作便可在多种机器上运行。是Java语言”Write Once, Run Everywhere”特性的证明。

2.请描述自已拟定的实验计划和步骤,以及对输入和输出的设计。
Please design your experimental plan and procedures, as well as the design of input and output of the SCANNER

TINY的程序结构很简单,它在语法上与A d a或P a s c a l的语法相似:仅是一个由分号分隔开的语句序列。另外,它既无过程也无声明。所有的变量都是整型变量,通过对其赋值可较轻易地声明变量(类似F O RT R A N或B A S I C)。它只有两个控制语句: i f语句和r e p e a t语句,这两个控制语句本身也可包含语句序列。I f语句有一个可选的e l s e部分且必须由关键字e n d结束。除此之外,r e a d语句和w r i t e语句完成输入/输出。在花括号中可以有注释,但注释不能嵌套。
TINY的表达式也局限于布尔表达式和整型算术表达式。布尔表达式由对两个算术表达式的比较组成,该比较使用<与=比较算符。算术表达式可以包括整型常数、变量、参数以及4个整型算符+、-、*、/,此外还有一般的数学属性。布尔表达式可能只作为测试出现在控制语句中——而没有布尔型变量、赋值或I / O。

flex的语法被分为三个部分:
{definitions}
%%
{rules}
%%
{user subroutines}definitions:LABEL REGULAR_EXPRESSION
LABEL是这里类字符串的名称,REGULAR_EXPRESSION则是匹配这种字符串的正则表达式。
下面是网上找到的正则表达式的语法:
|   或
[]  括号中的字符取其一
-   a-z表示ascii码中介于a-z包括a.z的字符
\   转义(flex不能识别除字母外的字符)
*   0或多个字符
?   0或1个字符
+  1或多个字符
^   除此之外的其余字符
.   除\n外的所有字符,等价于^\n

flex XXX.l命令将XXX.l文件编译为一个c文件,将这个c文件编译运行,得到一个exe文件,用这个程序来解析tiny语言即可。
3.选择三方工具,阅读其使用说明,并尝试建立起工作环境。
Choose the LEX tools, read their instructions, and try to establish a working environment.

配置环境变量:右击此电脑->属性->高级系统设置->“高级”一栏下的环境变量 在系统变量Path中增加win_flex_bison的路径。直接在桌面新建一个test文件夹,里面创建文本文件后改名lex.l打开cmd,同样方法获得路径,输入cd :路径,比如我cd C:\Users\Administrator\Desktop\test 回车后进入。没有报错,文件夹出现新文件,说明配置成功

编译原理实验一预习报告相关推荐

  1. 编译原理——实验叁预习报告——基于YACC的TINY语法分析器的构建

    一.实验目的: 运用YACC,针对给定的文法,构造一个语法分析器.给出实验方案,实施并描述结果. 二.实验预习提示 1.表达:针对5.5节中的calculator文法,设计输入和输出 2.观察:观察p ...

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

    实验目的 构造tiny语言的词法分析器(扫描器),要求利用第三方的lex工具进行构造.实验结果:构造出的扫描器,能够读入教材样例中给出的tiny语言的示例代码,分解成token输出. Experime ...

  3. html解析器编译原理,编译原理实验报告词法分析器(内含源代码).docx

    编译原理实验报告词法分析器(内含源代码) 编译原理实验(一) --词法分析器 实验描述 运行环境:vc++2008 对某特定语言A ,构造其词法规则. 该语言的单词符号包括: 1该程序能识别的单词符号 ...

  4. c语言词法分析器实验原理,词法分析器的设计与实现 编译原理实验报告.doc

    词法分析器的设计与实现 编译原理实验报告 中北大学软件学院 实 验 报 告 专 业 软件工程 课程名称 编译原理 学 号 姓 名 辅导教师 张静 成绩 实验日期2015.5.19实验时间14:00~1 ...

  5. 编译原理上机实习c语言小子集编译程序的实现报告,合肥工业大学编译原理实验报告(完整代码版)...

    <合肥工业大学编译原理实验报告(完整代码版)>由会员分享,可在线阅读,更多相关<合肥工业大学编译原理实验报告(完整代码版)(58页珍藏版)>请在人人文库网上搜索. 1.计算机与 ...

  6. 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法

    <编译原理-实验5-LR(1)分析法>由会员分享,可在线阅读,更多相关<编译原理-实验5-LR(1)分析法(6页珍藏版)>请在人人文库网上搜索. 1.编译原理实验报告项目名称 ...

  7. 编译原理实验:自上而下语法分析

    编译原理实验:自上而下语法分析 1. 实验题目:自上而下语法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3. 算法流程 4. 源程序 5. 调试数据 1. 实验题目:自上而下语法分析 ...

  8. 编译原理实验:自下而上语法分析

    编译原理实验:自下而上语法分析 1. 实验题目:自下而上语法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3. 算法流程 4. 源程序 5. 调试数据 1. 实验题目:自下而上语法分析 ...

  9. 太原理工 编译原理 c语言,太原理工大学编译原理实验

    <太原理工大学编译原理实验>由会员分享,可在线阅读,更多相关<太原理工大学编译原理实验(19页珍藏版)>请在人人文库网上搜索. 1.本科实验报告课程名称: 编译原理 实验项目: ...

最新文章

  1. 9.QT-标准对话框
  2. 【html】【13】特效篇--下拉导航
  3. Linux学习(linux就该这么学习)8.1
  4. 写在2-14,程序员才看得懂的情书
  5. spring data jpa从入门到精通_Spring Data JPA的简单入门
  6. ecshop首页调用指定分类的所有产品(指定一级调二级)
  7. 把数据输出到Word (非插件形式)
  8. python人机对战的实验步骤_人机对战初体验:Python实现四子棋游戏
  9. mysql sqlyog 1045_sqlyog错误代码1045
  10. k2p升级显示服务器错误,k2p—b1版本刷固件遇到的问题
  11. 学习Dart语言,看这一篇文章就够了!(详细介绍)
  12. ai怎么做盒子效果图_AI制作包装纸盒贴图教程
  13. android studio keymap eclipse,android studio eclipse keymap theme 快捷键 主题风格设置
  14. 加密聊天应用依然安全
  15. 查询活动开始时间和结束时间
  16. Linux中cp(拷贝)命令
  17. C 语言取整的几种方法
  18. linux 编译配置内核路由功能,Linux下多播路由的实现-网管专栏,防火墙和路由
  19. 1——从IOP思想开始
  20. DW大学生网页作业制作设计 中华饮食文化(HTML+CSS+JavaScript) Web前端大作业

热门文章

  1. 8.3 直接插入排序
  2. OpenCV---图像金字塔原理
  3. Activity的launchMode和任务栈小结
  4. 同时打开两个excel工作窗口
  5. 复习--3--对于第三堂课的总结--将两个页面相互用超链接链接到一起
  6. Python的初级语法
  7. 脑电信号特征提取常用算法(共空间模式CSP、小波变换DWT、功率谱密度PSD、AR模型)
  8. eth0,eth1,eth2,lo是什么
  9. 【转】补零与离散傅里叶变换的分辨率
  10. 组会PPT20200522《Summary of Study and Research from May 8 to May 21》