编译原理预习报告 实验一 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.  

输入:

{ Sample program

in TINY language -

computes factorial

}

read x; { input an integer }

if 0 < x then { don't compute if x <= 0 }

fact := 1;

repeat

fact := fact * x;

x := x - 1

until x = 0;

write fact  { output factorial of x }

end

预习要求:

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.

答:现代程序设计语言编译器的词法分析技术主要包括手工编写词法分析器和使用词法分析器生成工具两种方法。下面我将以Java和Python两种语言为例,分别介绍它们的词法分析技术的特征点,并进行比较和分析。

(1)Java的词法分析技术特征点

Java的词法分析技术主要采用手工编写词法分析器的方法,采用有限状态自动机(Finite State Automaton, FSA)来实现。Java语言自带了一个工具JFlex,可以通过指定正则表达式来生成词法分析器代码,生成的代码可以在Java编译器中进行编译和链接,最终生成可执行程序。Java的词法分析器技术具有以下特征点:

a.使用正则表达式来表示词法规则,语法简洁明了,易于理解和维护;

b.支持自定义词法规则,可以根据实际需要灵活地定义和调整规则;

c.生成的词法分析器效率高,能够快速地识别和处理各种标记;

d.Java的词法分析器能够与其他编译器技术(如语法分析器、语义分析器等)紧密结合,形成完整的编译器系统。

(2)Python的词法分析技术特征点

Python的词法分析技术主要采用使用词法分析器生成工具的方法,常用的工具包括ply和lex等。使用这些工具,开发人员只需要定义词法规则,工具就可以自动地生成词法分析器代码。Python的词法分析器技术具有以下特征点:

a.使用词法分析器生成工具,可以减少开发人员的工作量,提高开发效率;

b.支持自定义词法规则,可以根据实际需要灵活地定义和调整规则;

c.生成的词法分析器效率较高,能够快速地识别和处理各种标记;

d.Python的词法分析器能够与其他编译器技术(如语法分析器、语义分析器等)紧密结合,形成完整的编译器系统。

(3)优缺点比较和结论

通过以上分析,我们可以看出Java和Python两种语言的词法分析技术都有其独特的特点和优点。Java的词法分析器采用手工编写的方式,可以灵活地定义词法规则,并且生成的词法分析器效率较高。而Python的词法分析器采用使用词法分析器生成工具的方式,可以大大减少开发人员的工作量,并且生成的词法分析器也具有较高的效率。

从优缺点的比较来看,Java的词法分析技术需要开发人员具备较高的技能和经验,对词法分析器的开发和维护都需要花费较大的精力。而Python的词法分析技术则可以更快速地进行开发和维护,但在处理较为复杂的词法规则时可能存在一定的限制。此外,两种技术都需要与其他编译器技术(如语法分析器、语义分析器等)相结合,才能构建完整的编译器系统。

综上所述,无论是Java的手工编写词法分析器的方式,还是Python的使用词法分析器生成工具的方式,都有其独特的优点和缺点。在实际应用中,应该根据实际情况选择合适的技术,并结合其他编译器技术,构建完整的编译器系统。

2.请描述自已拟定的实验计划和步骤,以及对输入和输出的设计。

Please design your experimental plan and procedures, as well as the design of input and output of the SCANNER

答:实验计划:

①选择使用win_flex工具实现tiny程序的词法分析

②学习了解TINY语言特点以及关键字表a.语句序列用分号隔开

b.所有变量都是整形变量,且不需要声明

c.只有两个控制语句,if和repeat

d.if判断语句必须以end结束,且有可选的else语句

e.read和write完成输入输出

f.花括号表示注释,但不允许嵌套注释

g.有<和=两个比较运算符h.有+、-、、/简单运算符

 ③根据Lex源程序的三部分结构(声明部分、转换规则、辅助函数)编写代码,其中,转换规则决定了构建的是tiny语言的词法分析器(扫描器)。

具体步骤:

a.建立起win_flex工作环境,将教材样例中给出的tiny语言的示例代码保存到input.txt文件中,然后将代码写好,保存到lex文件中,利用win_flex生成.c文件(直接将lex文件拖到win_flex.exe上会生成默认文件名的lex.yy.c的源文件);

 

 b.编译运行lex.yy.c即可读入教材样例中给出的tiny语言的示例代码,分解成token输出。

 

3.选择三方工具,阅读其使用说明,并尝试建立起工作环境。

Choose the LEX tools, read their instructions, and try to establish a working environment.

答:工具使用说明及建立工作环境,参考文章:

win_flex下载以及基本使用 和实现tiny程序的词法分析(编译原理实验)_咪啪╮的博客-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值