实验一名称 词法分析程序(2学时)
实验目的
理解词法分析在编译程序中的作用;加深对有穷自动机模型的理解; 掌握词法分析程序的实现方法和技术。
实验内容
选择部分C语言的语法成分,设计其词法分析程序,要求能够识别关键字、运算符、分界符、标识符、常量(至少是整型常量,可以自己扩充识别其他常量)等,并能处理注释、部分复合运算符(如>=等)。单词以二元式形式输出、输出有词法错误的单词及所在行号。
实验要求
(1)待分析的简单的语法
关键字:begin if then while do end …
运算符和界符::= + - * / < >= = == ; ( ) # , …
其他单词是标识符id和整型常数num,通过以下正规式定义:
id=l(l|d)* (l:letter d:digit)
num=dd*
空格、注释:在词法分析中要去掉。
(2)各种单词符号对应的种别编码(参考这张表,可以不同)
(3)待分析的源程序:
(a)int main()
{
int a=1,b=2;
b/a;
/* 注释部分*/
b>a;
c=a+b;
cout<0)
{
if (2x = = 7)
i3=z;
}
实验二名称 预测分析程序(2学时)
实验目的
掌握LL(1)文法分析思想;掌握预测分析程序的构造方法。
实验内容
设计及实现能够识别表达式的预测分析程序。
实验要求
(1)总体要求:
1) 根据文法手工或程序方式构造预测分析表;
2) 采用程序方式构造预测分析表时,需计算First()和Follow()集合,有一定难度;
3) 根据预测分析表,设计并实现预测分析总控程序,完成自上而下的语法分析器。
(2)文法的定义(可以选择此文法,也可以自己选择其他文法)
(3)给出当输入串为:(i1+i2)*(i3+i4)的分析过程。(输出分析过程中的栈,输入串和利用的产生式等信息)