一、实验目的
(1) 掌握语法分析过程,即语法分析是如何根据语法规则逐一分析词法分析时得到的属性字,检查语法错误。
(2) 构造LR分析程序和LL(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子。
(3) 理解LR分析方法是严格的从左向右扫描,和自底向上的语法分析方法。
(4) 理解词法分析和语法分析的接口方式。
二、实验内容
由TPL语言文法建立LR分析表和LL(1)分析表,编写TPL语言的语法分析程序,它从左到右依次对词法分析得到的结果数组或链表等存储结构中进行读取,判断是否符合语法规则,并给出语法分析过程和结果,如图3-8所示。
图3-8 语法分析程序流程
三、实验要求
(1) 根据TPL语言的文法规则建立LR分析表和LL(1)分析表;
(2) 分别采用自底向上和自顶向下的方法来设计TPL编译器,实现编译器的以下功能:
① 能对任何TPL语言词法分析结果进行语法分析。
② 输出分析过程表。
③ 若语法分析过程有错误,则定位错误,并指出错误原因。
四、提示和建议
(1) 因为需要存储产生式,而且有的产生式中的符号不是一个字符,因此建议对这样的字符简化,方便存储。例如,A→id:=E; 中的id简化为i。
(2) 因为在程序中,自定义标识符不能重名,因此需对一部分产生式中同名的非终结的名字进行改写。例如,赋值语句产生式S→id:=E中有S,部分控制语句产生式也有S,因此可以将将S→id:=E中的S改写成A。