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