编译原理实验指导

2026/1/23 14:13:10

基本字:begin(?{?, “NUL”}、end(?)?, “NUL”}、integer(?a?, “NUL”}、real(?c?, “NUL”}

标识符:(?i?, 字符串) 无符号整常数:(?x?, 字符串) 无符号实常数:(?y?, 字符串)

运算符;=(?=?, “NUL”)、+(?+?, “NUL”)、*(?*?, “NUL”)、++(?$?, “NUL”)

界符:,(?,?, “NUL”)、;(?;?, “NUL”)、((,C?,?, “NUL”) 、)?)?, ?NUL?)、#(?#?, “NUL”)

状态转换图

单词分为单字符单词或多字符单词。 实验步骤:

(1)熟悉习教材关于词法分析的原理。

(2)依照教材关于词法分析的算法,使用C/C++语言实现该算法。 (3)调试、编译、运行程序。 实验要求:

在下次实验时提交本次实验的实验报告(实验报告包括实验目的、实验内容、实验实现过程、源程序、实验结果、实验体会)。

7

实现代码:

词法分析有5个函数构成,即预处理函数pro_process、扫描函数scanner、拼接函数concat、查基本字表函数reserve和主函数main。

#include #include #include #include

const short WORDLEN=20; struct code_val{

char code; char val[WORDLEN]; }

void pro_process(char *); void concat(char [],char); char reserve(char[]);

code_val scanner(char *); void main() {

char buf[4048]={?\\0?}; pro_process(buf); cout<

ofstream coutf(“Lex_r.txt”,ios::out); code_val t; do {

t=scanner(buf); //调用一次scanner函数,获得一个单词二元式 coutf<

cout<<”end of lexical analysis”<

8

实验三 递归下降分析法

实验学时:2学时 实验目的:

掌握递归下降语法分析的原理

利用高级语言的递归过程为给定文法的每个非终结符构造对应的递归函数 实验内容:

若文法不含左递归,并且每个非终结符的所有候选式的首符集都两两不相交,就有可能构造一个不带回溯的自上而下的语法分析程序。这个分析程序是由一组递归过程(函数)组成的,每个过程(函数)对应文法的一个非终结符。如果用某种高级语言写出所有递归过程(函数),那就可以用这个高级语言的编译系统产生整个分析程序。这个分析程序称为递归下降分析器。

用类C语言为文法G的每个非终结符构造对应的递归函数。 文法G如下所示: E→TE? E?→+TE?|ε T→FT? T?→*FT?|ε F→(E)|i|x|y 实验步骤:

9

(1)熟悉习教材关于语法分析的原理。

(2)依照教材关于基于递归下降分析的算法,使用C/C++语言实现该算法。

(3)调试、编译、运行程序。 实验要求:

在下次实验时提交本次实验的实验报告(实验报告包括实验目的、实验内容、实验实现过程、源程序、实验结果、实验体会)。

10


编译原理实验指导.doc 将本文的Word文档下载到电脑
搜索更多关于: 编译原理实验指导 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219