v1.0 可编辑可修改 实验五 LL(1)文法识别程序设计
一、实验目的
通过LL(1)文法识别程序的设计理解自顶向下的语法分析思想。 二、实验重难点
FIRST集合、FOLLOW集合、SELECT集合元素的求解,预测分析表的构造。 三、实验内容与要求
实验内容:
1. 阅读并理解实验案例中LL(1)文法判别的程序实现; 2. 参考实验案例,完成简单的LL(1)文法判别程序设计。 四、实验学时
4课时
五、实验设备与环境 C语言编译环境 六、实验案例
1. 实验要求
参考教材93页预测分析方法,94页 图 预测分析程序框图,编写表达式文法的识别程序。要求对输入的LL(1)文法字符串,程序能自动判断所给字符串是否为所给文法的句子,并能给出分析过程。
表达式文法为: E?E+T|T T?T*F|F F?i|(E) 2. 参考代码
11
v1.0 可编辑可修改
22
v1.0 可编辑可修改
33
v1.0 可编辑可修改 为了更好的理解代码,建议将图做如下标注:
/* 程序名称: LL(1)语法分析程序 */ /* E->E+T|T */ /* T->T*F|F */ /* F->(E)|i */
/*目 的: 对输入LL(1)文法字符串,本程序能自动判断所给字符串是否为所给文法的句子,并能给出分析过程。
/********************************************/ /* 程序相关说明 */ /* A=E' B=T' */
/* 预测分析表中列号、行号 */ /* 0=E 1=E' 2=T 3=T' 4=F */ /* 0=i 1=+ 2=* 3=( 4=) 5=# */ /************************************/ #include\ #include \
44
v1.0 可编辑可修改 #include \ #include \
/*定义链表这种数据类型参见: Lchar{ char char_ch; struct Lchar *next;
}Lchar,*p,*h,*temp,*top,*base;
/*p指向终结符线性链表的头结点,h指向动态建成的终结符线性链表节点,top和base分别指向非终结符堆栈的顶和底*/
(1) char
curchar;
55