📄 cfg.txt
字号:
SNL语言的上下文无关文法:
总程序:
1) Program ::= ProgramHead DeclarePart ProgramBody .
{PROGRAM}
程序头:
2) ProgramHead ::= PROGRAM ProgramName {PROGRAM}
3) ProgramName ::= ID {ID }
程序声明:
4) DeclarePart ::= TypeDec VarDec ProcDec
{TYPE, VAR, PROCEDURE, BEGIN }
类型声明:
5) TypeDec ::= e {VAR, PROCEDURE, BEGIN}
6) | TypeDeclaration {TYPE}
7) TypeDeclaration ::= TYPE TypeDecList {TYPE}
8) TypeDecList ::= TypeId = TypeName ; TypeDecMore { ID }
9) TypeDecMore ::= e {VAR,PROCEDURE,BEGIN}
10) | TypeDecList {ID}
11) TypeId ::= ID {ID}
类型:
12) TypeName ::= BaseType { INTEGER, CHAR }
13) | StructureType {ARRAY, RECORD}
14) | ID {ID}
15) BaseType ::= INTEGER { INTEGER}
16) | CHAR { CHAR }
17) StructureType ::= ArrayType { ARRAY }
18) | RecType { RECORD }
19) ArrayType ::= ARRAY [low..top ] OF BaseType { ARRAY }
20) Low ::= INTC { INTC }
21) Top ::= INTC { INTC }
22) RecType ::= RECORD FieldDecList END { RECORD }
23) FieldDecList ::= BaseType IdList ; FieldDecMore {INTEGER, CHAR }
24) | ArrayType IdList ; FieldDecMore { ARRAY }
25) FieldDecMore := e { END }
26) | FieldDecList {INTEGER,CHAR, ARRAY}
27) IdList ::= ID IdMore {ID }
28) IdMore ::= e { ; }
29) | , IdList { , }
变量声明:
30) VarDec := e {PROCEDURE, BEGIN}
31) | VarDeclaration { VAR }
32) VarDeclaration ::= VAR VarDecList { VAR }
33) VarDecList ::= TypeName VarIdList ; VarDecMore
{INTEGER,CHAR,ARRAY, RECORD, ID}
34) VarDecMore ::= e {PROCEDURE ,BEGIN }
35) |VarDecList { INTEGER,CHAR,ARRAY, RECORD,ID }
36)VarIdList ::= id VarIdMore {ID }
37)VarIdMore ::= e { ; }
38) | , VarIdList { , }
过程声明:
39) ProcDec ::= e {BEGIN}
40) | ProcDeclaration {PROCEDURE}
41) ProcDeclaration ::= PROCEDURE {PROCEDURE}
ProcName ( ParamList ) ;
ProcDecPart
ProcBody
ProcDecMore
42) ProcDecMore ::= e { BEGIN }
43) | ProcDeclaration {PROCEDURE }
44) ProcName ::= ID {ID}
参数声明:
45) ParamList ::= e { ( )}
46) | ParamDecList
{INTEGER,CHAR,ARRAY, RECORD,ID ,VAR }
47) ParamDecList ::= Param ParamMore
{ INTEGER,CHAR,ARRAY, RECORD, ID, VAR }
48) ParamMore ::= e { ( )
49) | ; ParamDecList { ; }
50) Param ::= TypeName FormList
{INTEGER,CHAR,ARRAY, RECORD,ID }
51) | VAR TypeName FormList { VAR }
52) FormList ::= ID FidMore {ID}
53) FidMore ::= e {; } }
54) | , FormList {, }
过程中的声明部分:
55) ProcDecPart ::= DeclarePart {TYPE, VAR, PROCEDURE, BEGIN }
过程体:
56) ProcBody ::= ProgramBody {BEGIN}
主程序体:
57) ProgramBody ::= BEGIN StmList END { BEGIN }
语句序列:
58) StmList ::= Stm StmMore
{ID, IF, WHILE, RETURN, READ,WRITE}
59) StmMore ::= e { ELSE , FI, END,ENDWH }
60) | ; StmList {;}
语句:
61) Stm ::= ConditionalStm { IF }
62) | LoopStm { WHILE }
63) | InputStm {READ}
64) |OutputStm {WRITE}
65) | ReturnStm { RETURN }
66) | ID AssCall {ID }
因为赋值语句和函数调用语句的开始部分都是标识符。
67) AssCall ::= AssignmentRest {:=}
68) | CallStmRest {( )
赋值语句:
69) AssignmentRest ::= VariMore := Exp { [ , DOT ,:=}
条件语句:
70) ConditionalStm ::= IF RelExp THEN StmList ELSE StmList FI { IF }
循环语句:
71) LoopStm ::= WHILE RelExp DO StmList ENDWH { WHILE }
输入语句:
72) InputStm ::= READ ( Invar) {READ}
73) Invar ::= ID { ID}
输出语句:
74) OutputStm ::= WRITE( Exp ) { WRITE }
返回语句:
75) ReturnStm ::= RETURN ( Exp ) { RETURN }
过程调用语句:
76) CallStmRest ::= ( ActParamList ) {( }
77) ActParamList ::= e { }}
78) | Exp ActParamMore { ( , INTC, ID }
79) ActParamMore ::= e {)}
80) | , ActParamList {,}
条件表达式:
81) RelExp ::= Exp OtherRelE { ( , INTC, ID }
82) OtherRelE ::= CmpOp Exp { < , = }
表达式:
83) Exp ::= Term OtherTerm { ( , INTC, ID }
84) OtherTerm ::= ε
{<,=, ] ,THEN,ELSE,FI,DO,ENDWH, ) ,END, ; ,COMMA }
85) | AddOp Exp { + , - }
项:
86) Term ::= Factor OtherFactor { ( , INTC, ID }
87) OtherFactor ::= ε
{+, - ,<,=, }, THEN,ELSE,FI,DO,ENDWH, },END, ; ,COMMA }
88) | MultOp Term {* ,/ }
因子:
89) Factor ::= ( Exp ) {(}
90) | INTC {INTC}
91) | Variable {ID}
92) Variable ::= ID VariMore {ID}
93) VariMore ::= ε
{:=, *, /, +, - , <, =,THEN,ELSE,FI,DO,ENDWH, ),END, ; ,COMMA }
94) | [ Exp ] { [ }
95) | . FieldVar {DOT}
96) FieldVar ::= ID FieldVarMore {ID}
97) FieldVarMore ::= ε
{ :=, *, /, +, - , <, =,THEN,ELSE,FI,DO,ENDWH, },END, ; ,COMMA }
98) | [ Exp ] {[ }
99) CmpOp ::= <
100) | =
101)AddOp ::= +
102) | -
103) MultOp ::= *
104) | /
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -