编译原理实验讲义
2008-04-10 19:41
253 查看
编译原理实验讲义
ver 0.4
实验一 C_minus语言词法分析器的设计(6学时)
【目的】 设计一个简单的词法分析器,从而进一步加深对词法分析器工作原理的理解。
【要求】
1、该个词法分析器要求至少能够识别以下几类单词:
a. 关键字:else if int return void while共6个,所有的关键字都是保留字,并且必须是小写;
b. 标识符:识别与C语言词法规定相一致的标识符,通过下列正则表达式定义:ID = letter (letter | digit)*;
c. 常数:NUM=(+ | - |ε)digit digit*(.digit digit* |ε)(e(+ | - |ε) digit digit* |ε),letter = a|..|z|A|..|Z|,digit = 0|..|9,包括整数,如123, -123, +123等;小数,如123.45, +123.45, -123.45;科学计数法表示的常数,如+1.23e3,-2.3e-9;
d. 专用符号:+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */;
2、分析器的输入为由上述几类单词构成的程序,输出为该段程序的机内表示形式,即关键字、运算符、界限符变为其对应的机内符,常数使用二进制形式,标识符使用相应的标识符表指针表示。
3、词法分析器应当能够指出源程序中的词法错误,如不可识别的符号、错误的词法等。
【方法与参考】
首先给出所有单词的正规式(或正规文法)表示,然后将其转化为NFA,再将NFA确定化、最小化,得到最简的c,根据DFA编写词法分析器的代码。
【实验环境和工具】 本实验不限定现所使用的开发工具以及运行环境。
实验二递归下降分析器的设计(6学时)
【目的】 使用递归子程序法设计一个语法分析程序,理解自顶向下分析方法的原理,掌握手工编写语法分析程序的方法。
【要求】
1、使用递归下降分析算法分析表达式文法:
exp ::= exp addop term | term
addop ::= + | -
term ::= term mulop factor | factor
mulop ::= * | /
factor ::= (exp) | number
其中number可以是多位的十进制数字串(整数即可),因此这里还需要一个小的词法分析器来得到number的值。
2、该词法分析器以子程序形式出现,当需要进行词法分析时进行调用;
3、能够识别正确和错误的表达式;
4、在进行语法分析的过程中,计算输入表达式的值。
【方法与参考】 首先将上述文法改写成EBNF形式,根据递归下降分析算法基本思想编写程序。
【实验环境和工具】 本实验不限定现所使用的开发工具以及运行环境。
实验三算符优先分析法分析器的设计(6学时)
【目的】 设计一个算符优先分析器,理解优先分析方法的原理。
【要求】 使用算符优先分析算法分析下面的文法:
E’ → #E#
E → E+T | T
T → T*F | F
F → P^F | P
P → (E) | i
其中i可以看作是一个终结符,无需作词法分析。具体要求如下:
1. 如果输入符号串为正确句子,显示分析步骤,包括分析栈中的内容、优先关系、输入符号串的变化情况;
2. 如果输入符号串不是正确句子,则指示出错位置。
【方法】 首先构造算符优先关系表,然后根据算符优先分析算法编写程序。
【实验环境和工具】 本实验不限定现所使用的开发工具以及运行环境。
ver 0.4
实验一 C_minus语言词法分析器的设计(6学时)
【目的】 设计一个简单的词法分析器,从而进一步加深对词法分析器工作原理的理解。
【要求】
1、该个词法分析器要求至少能够识别以下几类单词:
a. 关键字:else if int return void while共6个,所有的关键字都是保留字,并且必须是小写;
b. 标识符:识别与C语言词法规定相一致的标识符,通过下列正则表达式定义:ID = letter (letter | digit)*;
c. 常数:NUM=(+ | - |ε)digit digit*(.digit digit* |ε)(e(+ | - |ε) digit digit* |ε),letter = a|..|z|A|..|Z|,digit = 0|..|9,包括整数,如123, -123, +123等;小数,如123.45, +123.45, -123.45;科学计数法表示的常数,如+1.23e3,-2.3e-9;
d. 专用符号:+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */;
2、分析器的输入为由上述几类单词构成的程序,输出为该段程序的机内表示形式,即关键字、运算符、界限符变为其对应的机内符,常数使用二进制形式,标识符使用相应的标识符表指针表示。
3、词法分析器应当能够指出源程序中的词法错误,如不可识别的符号、错误的词法等。
【方法与参考】
首先给出所有单词的正规式(或正规文法)表示,然后将其转化为NFA,再将NFA确定化、最小化,得到最简的c,根据DFA编写词法分析器的代码。
【实验环境和工具】 本实验不限定现所使用的开发工具以及运行环境。
实验二递归下降分析器的设计(6学时)
【目的】 使用递归子程序法设计一个语法分析程序,理解自顶向下分析方法的原理,掌握手工编写语法分析程序的方法。
【要求】
1、使用递归下降分析算法分析表达式文法:
exp ::= exp addop term | term
addop ::= + | -
term ::= term mulop factor | factor
mulop ::= * | /
factor ::= (exp) | number
其中number可以是多位的十进制数字串(整数即可),因此这里还需要一个小的词法分析器来得到number的值。
2、该词法分析器以子程序形式出现,当需要进行词法分析时进行调用;
3、能够识别正确和错误的表达式;
4、在进行语法分析的过程中,计算输入表达式的值。
【方法与参考】 首先将上述文法改写成EBNF形式,根据递归下降分析算法基本思想编写程序。
【实验环境和工具】 本实验不限定现所使用的开发工具以及运行环境。
实验三算符优先分析法分析器的设计(6学时)
【目的】 设计一个算符优先分析器,理解优先分析方法的原理。
【要求】 使用算符优先分析算法分析下面的文法:
E’ → #E#
E → E+T | T
T → T*F | F
F → P^F | P
P → (E) | i
其中i可以看作是一个终结符,无需作词法分析。具体要求如下:
1. 如果输入符号串为正确句子,显示分析步骤,包括分析栈中的内容、优先关系、输入符号串的变化情况;
2. 如果输入符号串不是正确句子,则指示出错位置。
【方法】 首先构造算符优先关系表,然后根据算符优先分析算法编写程序。
【实验环境和工具】 本实验不限定现所使用的开发工具以及运行环境。
相关文章推荐
- 编译原理实验,实现一个代码解析程序
- 编译原理实验三——语法分析(递归下降法)
- 哈工大编译原理第一次实验--词法分析(Java版本)
- 哈工大编译原理实验2——语法分析
- 哈工大软件学院编译原理实验1——词法分析
- 在Windows平台使用flex和tcc进行编译原理-词法分析的实验环境搭建
- 编译原理实验-FLEX+BISON+DEV C++完美解决方案
- CSUFT 编译原理实验四 LR(1)
- 编译原理实验2-递归下降分析法
- 编译原理——实验 1.1用 FLEX自动构造词法分析程序
- 电子科技大学-编译原理实验
- 设计有穷自动机DFA实现C++简单程序的词法分析、扫描(编译原理实验) 推荐
- java程序-编译原理实验
- 编译原理:实验二、集合与线性表操作
- 编译原理课程实验
- 编译原理实验3-算符优先分析法
- 编译原理实验---词法分析
- 编译原理 实验1 PL/0语言词法分析
- 编译原理 实验1 词法分析程序的构造
- 编译原理实验2-递归下降分析–表达式求值