资源描述:
《实验4lr(k)分析器》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验四LR(k)分析器设计一、实验目的(1)掌握下推机这一数学模型的结构和理论,并深刻理解下推自动机在LR分析法中的应用(即LR分析器)。(2)掌握LR分析法的思想,学会特定分析表的构造方法,利用给出的分析表进行LR分析。二、实验内容根据课堂讲授的形式化算法,编制程序实现对以下语法进行自底向上语法分析的LR分析器,设计分析表,对给出的输入语句进行语法分析,判断是否符合相应的文法要求。Program®blockblock®{stmts}stmts®stmtstmts
2、estmt®id=E;
3、while(bool)stmt
4、block
5、bool®E<=E
6、E>=EE®E+T
7、TT®id
8、num输入语句:三、实验要求要求实现以下功能:a)设计分析表和语句的输入;b)要实现通用的LR分析思想的源代码;c)输出对语句的语法分析判断结果,如果可能给出错误的信息提示。四、实现方法根据课本的LR分析器模型和LR分析算法,完成LR分析。对要求中的错误信息提示,指的是对应分析表中的空白处,每一个空白的地方都应该有对应的错误情况,因而有相应的错误信息。注意这里的语法分析,是在词法分析的基础上进行的。五、识别活前缀的DFA六、SLR(1)分析表①Program->block②Blo
9、ck->{stmts}③Stmts->stmtstmts④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->numFOLLOW(program)={‘#’}FOLLOW(block)={‘#’,‘}’,‘id’,‘while’,‘{’}FOLLOW(stmts)={‘}’}FOLLOW(stmt)={‘}’,‘id’,‘while’,‘{’}FOLLOW(bool)={‘)’}FOL
10、LOW(E)={‘<=’,‘>=’,‘+’,‘;’,‘)’}FOLLOW(T)={‘<=’,‘>=’,‘+’,‘;’,‘)’}七、主要代码#ifndefLRANALYZER_H#defineLRANALYZER_H#include#include#include#include#include"Automation.h"classLRAnalyzer:publicQObject{Q_OBJECTpublic:explicitLRAnalyzer(QObjec
11、t*parent=0);boolbegin(QString,QTableWidget*);boolloadTable(QString);private:Automation*lex;QStringtable[30][30];QMaptrans;QMaptrans2;intderiveArg[30];intderiveLeft[30];};#endif//LRANALYZER_H#include"LRAnalyzer.h"LRAnalyzer::LRAnalyzer(QObject*par
12、ent):QObject(parent){lex=newAutomation;lex->addKeyword("while");//2000lex->addToken("+");//1000lex->addToken("=");//1001lex->addToken("<=");//1002lex->addToken(">=");//1003lex->addToken("{");//1004lex->addToken("}");//1005lex->addToken("(");//1006lex->addToken(")");//
13、1007lex->addToken(";");//1008lex->addToken("#");//1009trans.insert(1004,0);trans2.insert(1004,"{");trans.insert(1005,1);trans2.insert(1005,"}");trans.insert(1006,2);trans2.insert(1006,"(");trans.insert(1007,3);trans2.insert(1007,")");trans.insert(1000,4);trans2.insert
14、(1000,"+");trans.insert(1001,5);trans2.insert(1001,"=");trans.insert(1002,6);trans2.insert(1002,"<=");trans.insert(1003,7);t