编译原理实验一预习报告

实验一 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 回车后进入。没有报错,文件夹出现新文件,说明配置成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值