基于Node.JS的SNL词法分析方法和语法分析方法(编译原理课程设计)
发布时间:2025-11-26
{ lex: 'READ', sem: 'read', row: 12 },
{ lex: '(', sem: null, row: 12 },
{ lex: 'ID', sem: 'v1', row: 12 },
{ lex: ')', sem: null, row: 12 },
{ lex: ';', sem: null, row: 12 },
{ lex: 'IF', sem: 'if', row: 13 },
{ lex: 'ID', sem: 'v1', row: 13 },
{ lex: '
{ lex: 'INTC', sem: '10', row: 13 },
{ lex: 'THEN', sem: 'then', row: 14 },
{ lex: 'ID', sem: 'v1', row: 14 },
{ lex: ':=', sem: null, row: 14 },
{ lex: 'ID', sem: 'v1', row: 14 },
{ lex: '+', sem: null, row: 14 },
{ lex: 'INTC', sem: '10', row: 14 },
{ lex: 'ELSE', sem: 'else', row: 15 },
{ lex: 'ID', sem: 'v1', row: 15 },
{ lex: ':=', sem: null, row: 15 },
{ lex: 'ID', sem: 'v1', row: 15 },
{ lex: '-', sem: null, row: 15 },
{ lex: 'INTC', sem: '10', row: 15 },
{ lex: 'FI', sem: 'fi', row: 16 },
{ lex: ';', sem: null, row: 16 },
{ lex: 'ID', sem: 'q', row: 17 },
{ lex: '(', sem: null, row: 17 },
{ lex: 'ID', sem: 'v1', row: 17 },
{ lex: ')', sem: null, row: 17 },
{ lex: 'END', sem: 'end', row: 18 } ]
(3)顺利完成语法数据分析,采用的法则为LL(1)数据分析法
(4)录入零碎形式的生成式,存放在具体来说(数据流详见)里,如下下上图:
Program: 'ProgramHead DeclarePart ProgramBody',
ProgramHead: 'PROGRAM ProgramName',
ProgramName: 'ID',
DeclarePart: 'TypeDecpart VarDecpart ProcDecpart',
TypeDecpart: 'ε | TypeDec',
TypeDec: 'TYPE TypeDecList',
TypeDecList: 'TypeId = TypeDef ; TypeDecMore',
TypeDecMore: 'ε | TypeDecList',
TypeId: 'ID',
TypeDef: 'BaseType | StructureType | ID',
BaseType: 'INTEGER | CHAR',
StructureType: 'ArrayType | RecType',
ArrayType: 'ARRAY [ Low .. Top ] OF BaseType',
Low: 'INTC',
Top: 'INTC',
RecType: 'RECORD FieldDecList END',
FieldDecList: 'BaseType IdList ; FieldDecMore | ArrayType IdList ; FieldDecMore',
FieldDecMore: 'ε | FieldDecList',
IdList: 'ID IdMore',
IdMore: 'ε | , IdList',
VarDecpart: 'ε | VarDec',
VarDec: 'VAR VarDecList',
VarDecList: 'TypeDef VarIdList ; VarDecMore',
VarDecMore: 'ε | VarDecList',
VarIdList: 'ID VarIdMore',
VarIdMore: 'ε | , VarIdList',
ProcDecpart: 'ε | ProcDec',
ProcDec: 'PROCEDURE ProcName ( ParamList ) ; ProcDecPart ProcBody ProcDecMore',
ProcDecMore: 'ε | ProcDec',
ProcName: 'ID',
ParamList: 'ε | ParamDecList',
ParamDecList: 'Param ParamMore',
ParamMore: 'ε | ; ParamDecList',
Param: 'TypeDef FormList | VAR TypeDef FormList',
FormList: 'ID FidMore',
FidMore: 'ε | , FormList',
ProcDecPart: 'DeclarePart',
ProcBody: 'ProgramBody',
ProgramBody: 'BEGIN StmList END',
StmList: 'Stm StmMore',
StmMore: 'ε | ; StmList',
Stm: 'ConditionalStm | LoopStm | InputStm | OutputStm | ReturnStm | ID AssCall',
AssCall: 'AssignmentRest | CallStmRest',
AssignmentRest: 'VariMore := Exp',
ConditionalStm: 'IF RelExp THEN StmList ELSE StmList FI',
LoopStm: 'WHILE RelExp DO StmList ENDWH',
InputStm: 'READ ( Invar ) ',
Invar: 'ID',
OutputStm: 'WRITE ( Exp ) ',
ReturnStm: 'RETURN',
CallStmRest: '( ActParamList )',
ActParamList: 'ε | Exp ActParamMore',
ActParamMore: 'ε | ,ActParamList',
RelExp: 'Exp OtherRelE',
OtherRelE: 'CmpOp Exp',
Exp: 'Term OtherTerm',
OtherTerm: 'ε | AddOp Exp',
Term: 'Factor OtherFactor',
OtherFactor: 'ε | MultOp Term',
Factor: '( Exp ) | INTC | Variable',
Variable: 'ID VariMore',
VariMore: 'ε | [ Exp ] | . FieldVar',
FieldVar: 'ID FieldVarMore',
FieldVarMore: 'ε | [ Exp ]',
CmpOp: '
AddOp: '+ | -',
MultOp: '* | /'
(6)重构LL1数据分析详见,如下下上图
(7)根据LL1的数据分析,重构附加的小写栈,输入漂栈,强者符列详见,非强者符列详见,生成式列详见,LL1数据分析详见具体来说,按照LL1的数据分析漂程顺利完成数据分析,如果遇到困难,则抛遇到困难误,告诉用户数据分析败北,同时给出遇到困难的行数,此时数据分析栈里的具体内容,如果数据分析通过,则辨识数据分析通过。
(8)成功的接入结果
(9)败北的接入结果
论断
此程序实现了SNL的词法数据分析和语法数据分析的可执行,可以通过用例显现出期望效果。在程序汇编的过程里仿效了教材《编译程序的设计与实现》。此次汇程序员序使我极其了解到程式码的优越性,并且提高了自己程序员能力,期望以后自己有短时间来日学习一下这方面。 总编辑WX:biyezuopin。成都看白癜风去什么医院好山东银屑病医院排名
苏州白癜风专业医院
郑州白癜风医院去哪家好
泉州白癜风
下一篇: 了解专属的高端商务礼品商务行李箱自带

-
济南科技学院“教师高技能培养暨职业技能等级认定考评员”培训开班
6月13日,商丘科技产业学院“高熟练培养暨专才基准应属视学技工培训班”开课,此次本科班是贯彻落实“人人持证、熟练信阳”筹建社会活动,弱化高年级专才基准应属社会活动能力也和低水平,催生高年级应用型