百度文库1 实验四 LR (k)分析器设计一、实验目的(1)掌握下推机这一数学模型的结构和理论, 并深刻理解下推自动机在 LR分析法中的应用(即LR分析器)。(2)掌握LR分析法的思想,学会特定分析表的构造方法,利用给出的分析表进行 LR分析。二、实验内容根据课堂讲授的形式化算法,编制程序实现对以下语法进行自底向上语法分析的 LR分析器,设计分析表,对给出的输入语句进行语法分析,判断是否符合相应的文法要求。Program block block { stmts } stmts stmt stmts | stmt id = E ; | while ( bool ) stmt | block bool E <= E | E >= E E E + T | T T id | num 输入语句:三、实验要求要求实现以下功能:百度文库2 a) 设计分析表和语句的输入;b) 要实现通用的LR分析思想的源代码;c) 输出对语句的语法分析判断结果,如果可能给出错误的信息提示。四、实现方法根据课本的LR分析器模型和LR分析算法,完成 LR分析。对要求中的错误信息提示,指的是对应分析表中的空白处,每一个空白的地方都应该有对应的错误情况, 因而有相应的错误信息。 注意这里的语法分析,是在词法分析的基础上进行的。五、识别活前缀的 DFA 百度文库3 六、SLR(1)分析表①Program -> block ②Block -> { stmts } ③Stmts -> stmt stmts ④Stmts -> eps ⑤Stmt -> id = E; ⑥Stmt -> while ( bool ) stmt ⑦Stmt -> block ⑧Bool -> E <= E ⑨Bool -> E >= E ⑩E -> E + T ?E -> T ?T -> id ?T -> num FOLLOW(program) = {‘#’} FOLLOW(block) = {‘#’, ‘} ’, ‘id ’, ‘while ’, ‘{ ’} FOLLOW(stmts) = { ‘} ’} FOLLOW(stmt) = {‘} ’, ‘id ’, ‘while ’, ‘{ ’} FOLLOW(bool) = {‘ ) ’} FOLLOW(E) = {‘<=’, ‘>= ’, ‘+’, ‘;’, ‘)’} FOLLOW(T) = {‘<=’, ‘>= ’, ‘+’, ‘;’, ‘)’} 百度文库4 七、主要代码#ifndefLRANALYZER_H #defineLRANALYZER_H#include#include#include#include#include"Automation.h"classLRAnalyzer:publicQObject{ Q_OBJECTpublic: explicitLRAnalyzer ( QObject*parent= 0); boolbegin( QString ,QTableWidget*); boolloadTable(QString ); private: Automation* lex ; QStringtable...