⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfg.txt

📁 学习编译原理
💻 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 + -