1、 实验二语法分析程序设计与实现 16 2020年4月19日 文档仅供参考 实验二 语法分析程序设计与实现 一、实验目的 任选一种有代表性的语法分析方法,如算符优先法、递归下降法、LL(1)、SLR(1)、LR(1)等,经过设计、编制、调试实现一个典型的语法分析程序,对实验一所得扫描器提供的单词序列进行语法检查和结构分析,实现并进一步掌握常见的语法分析方法。 二、基本实验内容与要求 选择对各种常见高级程序设计语言都较为通用的语法结构——算术表示式的一个简化子集——作为分析对象,根据如下描述其语法结构的BNF定义G2[<算术表示式>],任选一
2、种学过的语法分析方法,针对运算对象为无符号常数和变量的四则运算,设计并实现一个语法分析程序。 G2[<算术表示式>]: <算术表示式> → <项> | <算术表示式>+<项> | <算术表示式>-<项> <项> → <因式> | <项>*<因式> | <项>/<因式> <因式> → <运算对象> | (<算术表示式>) 若将语法范畴<算术表示式>、<项>、<因式>和<运算对象>分别用E、T、F和i代表,则G2可写成: G2[E]:E → T | E+T | E-T T → F | T*F | T/F F → i | (E) 输入:由实验一输出的单词串,例如:UCON,PL
3、UCON,MU,ID ······ 输出:若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,而且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,而且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。 要求: 1、确定语法分析程序的流程图,同时考虑相应的数据结构,编写一个语法分析源程序。 2、将词法、语法分析合在一起构成一个完整的程序,并调试成功。 3、 供测试的例子应包括符合语法规则的语句,及分析程序能判别的若干错例。对于所输入的字符串,不论对错,都应有明确的信息输出。 三、问题分析及源程序 LL1文法: 改写文
4、法为: E- >TG e G> +TG g T- >FS t F- >-TG g1 G- >^ g2 S- >*FS s T- >/FS s1 S- >^ s2 F- >(E) f G- >i f1 分析表: i + - * / ( ) # E e e G g g1 g2 g2 T t t S s2 s2 s s1 s2 s2 F f1
5、
f
LL1源程序
#include
6、结符*/ char v2[20]={'E','G','T','S','F'}; /*非终结符*/ int j=0,b=0,top=0,l; /*L为输入串长度*/ class type /*产生式类型定义*/ {public: char origin; /*大写字符*/ char array[5];
7、 /*产生式右边字符 */ int length; /*字符个数*/ }; type e,t,g,g1,g2,s,s1,s2,f,f1; /*类对象*/ type C[10][10]; /*预测分析表*/ void print() /*输出分析栈*






