您当前的位置:首页 >> 工业物联
工业物联

基于Node.JS的SNL词法分析方法和语法分析方法(编译原理课程设计)

发布时间:2025-11-26

BEGIN', sem: 'begin', row: 11 },

{ 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

成都看白癜风去什么医院好
山东银屑病医院排名
苏州白癜风专业医院
郑州白癜风医院去哪家好
泉州白癜风

上一篇: 核酸样品常态化, IVD赛道还有哪些机遇?

下一篇: 了解专属的高端商务礼品商务行李箱自带

友情链接