燕山大学编译原理-(实验1 词法分析、实验2 自顶向下的语法分析程序、实验3 基于 LR(0)方法的语法分析、 实验4 语义分析和中间代码生成)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验1 词法分析

1.1实验目的

(1)理解有穷自动机及其应用
(2)掌握 NFA 到 DFA 的等价变换方法、DFA 最小化的方法
(3)掌握设计、编码、调试词法分析程序的技术和方法

1.2 实验任务

编写一个程序对输入的源代码进行词法分析,并打印分析结果。借助词法分析工具 GNU Flex,编写一个对使用 C--语言书写的源代码进行词法分析 (C--语言的文法参见附录 A),并使用 C 语言完成。

1.3 实验内容

1.3.1实验要求

你的程序要能够查出源代码中可能包含的词法错误: 词法错误(错误类型 A):(以输入 C--源代码为例)即出现 C--词法中未定义的字符 以及任何不符合 C--词法单元定义的字符

1.3.2 输入格式

程序的输入是一个包含 C--源代码的文本文件,程 序需要能够接收一个输入文件名作为参数。例如,假设你的程序名为 cc、输入文件名为 test1、 程序和输入文件都位于当前目录下,那么在 Linux 命令行下运行./cc test1 即可获得以 test1 作为输入文件的输出结果。

实验2 自顶向下的语法分析程序

2.1 实验目的

(1)熟练掌握 LL(1)分析表的构造方法。
(2)掌握设计、编制和调试典型的语法分析程序,进一步掌握常用的语法分析方法。

2.2 实验任务

根据 LL(1)分析法自己编写一个语法分析程序,语言不限,文法不限。

2.3 实验内容

2.3.1 实验要求

你的程序应具有通用性,能够识别由词法分析得出的词法单元序列是否是给定文法的正 确句子(程序),并能够输出分析过程和识别结果。

2.3.2 输入格式

1、一个包含源代码的文本文件,此时需要和词法分析程序进行对接,通过一次扫描同 时完成词法分析和语法分析;

实验3 基于 LR(0)方法的语法分析

3.1 实验目的

(1)掌握 LR(0)分析表的构造方法。
(2)掌握设计、编制和调试典型的语法分析程序,进一步掌握常用的语法分析方法。 (3)理解语法分析在编译程序中的作用。

3.2 实验任务

自己编写一个基于 LR(0)方法的语法分析程序。语言不限,文法不限。

3.3 实验内容

3.3.1 实验要求

你的程序应具有通用性,能够识别由词法分析得出的词法单元序列是否是给定 文法的正确句子(程序),并能够输出分析过程和识别结果。

3.3.2 输入格式

你的程序输入是一个包含待分析词法单元序列的文本 文件,程序需要能够接收一个输入文件名作为参数,以获得相应的输出结果。

3.3.3 输出格式

你的程序需要输出语法分析过程(包括 LR(0)分析表和分析过程表,并能够保 存 LR(0)分析表)和相应的分析结果(即此串是否为 LR(0)文法的句子)。

实验4 语义分析和中间代码生成

4.1 实验目的

(1)熟悉语义分析和中间代码生成过程。
(2)加深对语义翻译的理解。

4.2 实验任务

此次实验任务有两个:首先是语义分析任务,即在词法分析和语法分析程序的基础上编 写一个程序,对输入的源代码进行语义分析和类型检查,并打印分析结果;然后,在语义正确的基础上,实现一种中间代码的生成。

任务 1:审查每一个语法结构的静态语义,即验证语法正确的结构是否有意义。此部分 不再借助已有工具,需手写代码来完成。

任务 2:在词法分析、语法分析和语义分析程序的基础上,将输入源代码翻译成中间代 码。(A、B 任务二选一)

A) 将 C 源代码翻译为中间代码,理论上中间代码在编译器的内部表示可以选用树 形结构(抽象语法树)或者线形结构(三地址代码)等形式,为了方便检查你的程序,我 们要求将中间代码输出成线性结构,从而可以使用我们提供的虚拟机小程序(附录 B)来测 试中间代码的运行结果。
B) 编写一个中间代码生成程序,能将算术表达式等翻译成逆波兰、三元组或四元组形 式(选择其中一种形式即可)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值