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

📄 parse.v

📁 完成一个简化的C语言编译程序
💻 V
📖 第 1 页 / 共 2 页
字号:
    0  $accept : program $end

    1  program : declaration_list

    2  declaration_list : declaration_list declaration
    3                   | declaration

    4  declaration : var_declaration
    5              | fun_declaration

    6  var_declaration : type_specifier id SEMI

    7  $$1 :

    8  var_declaration : type_specifier id LBRACKET NUM $$1 RBRACKET SEMI

    9  type_specifier : INT
   10                 | CHAR
   11                 | FLOAT
   12                 | VOID

   13  id : ID

   14  fun_declaration : type_specifier id LPAREN params RPAREN compound_stmt
   15                  | type_specifier id LPAREN VOID RPAREN compound_stmt
   16                  | type_specifier id LPAREN RPAREN compound_stmt

   17  params : param_list

   18  param_list : param_list COMMA param
   19             | param

   20  param : type_specifier id
   21        | type_specifier id LBRACKET RBRACKET

   22  compound_stmt : LBC local_declarations RBC
   23                | LBC local_declarations statement_list RBC
   24                | LBC RBC
   25                | LBC statement_list RBC

   26  local_declarations : local_declarations var_declaration
   27                     | var_declaration

   28  statement_list : statement_list statement
   29                 | statement

   30  statement : expression_stmt
   31            | compound_stmt
   32            | if_stmt
   33            | while_stmt
   34            | return_stmt
   35            | assign_stmt
   36            | break_stmt

   37  expression_stmt : expression SEMI
   38                  | SEMI

   39  if_stmt : IF LPAREN expression RPAREN statement ELSE statement
   40          | IF LPAREN expression RPAREN statement

   41  while_stmt : WHILE LPAREN expression RPAREN statement

   42  return_stmt : RETURN SEMI
   43              | RETURN expression SEMI

   44  assign_stmt : var ASSIGN expression SEMI

   45  break_stmt : BREAK SEMI

   46  var : id
   47      | id LBRACKET expression RBRACKET

   48  expression : or_expression

   49  or_expression : or_expression OR and_expression
   50                | and_expression

   51  and_expression : and_expression AND simple_expression
   52                 | simple_expression

   53  simple_expression : additive_expression GE additive_expression
   54                    | additive_expression GT additive_expression
   55                    | additive_expression LE additive_expression
   56                    | additive_expression LT additive_expression
   57                    | additive_expression EQ additive_expression
   58                    | additive_expression NE additive_expression
   59                    | additive_expression

   60  additive_expression : additive_expression PLUS term
   61                      | additive_expression MINUS term
   62                      | term

   63  term : term TIMES factor
   64       | term OVER factor
   65       | factor

   66  factor : LPAREN expression RPAREN
   67         | var
   68         | call
   69         | NUM
   70         | FLOATNUM
   71         | CONSTCHAR
   72         | NOT factor

   73  call : id LPAREN args RPAREN
   74       | id LPAREN RPAREN

   75  args : arg_list

   76  arg_list : expression COMMA arg_list
   77           | expression


state 0
	$accept : . program $end

	INT  shift 1
	CHAR  shift 2
	FLOAT  shift 3
	VOID  shift 4

	program goto 5
	declaration_list goto 6
	declaration goto 7
	var_declaration goto 8
	fun_declaration goto 9
	type_specifier goto 10


state 1
	type_specifier : INT .  (9)

	.  reduce 9


state 2
	type_specifier : CHAR .  (10)

	.  reduce 10


state 3
	type_specifier : FLOAT .  (11)

	.  reduce 11


state 4
	type_specifier : VOID .  (12)

	.  reduce 12


state 5
	$accept : program . $end  (0)

	$end  accept


state 6
	program : declaration_list .  (1)
	declaration_list : declaration_list . declaration

	INT  shift 1
	CHAR  shift 2
	FLOAT  shift 3
	VOID  shift 4
	.  reduce 1

	declaration goto 11
	var_declaration goto 8
	fun_declaration goto 9
	type_specifier goto 10


state 7
	declaration_list : declaration .  (3)

	.  reduce 3


state 8
	declaration : var_declaration .  (4)

	.  reduce 4


state 9
	declaration : fun_declaration .  (5)

	.  reduce 5


state 10
	var_declaration : type_specifier . id SEMI
	var_declaration : type_specifier . id LBRACKET NUM $$1 RBRACKET SEMI
	fun_declaration : type_specifier . id LPAREN params RPAREN compound_stmt
	fun_declaration : type_specifier . id LPAREN VOID RPAREN compound_stmt
	fun_declaration : type_specifier . id LPAREN RPAREN compound_stmt

	ID  shift 12

	id goto 13


state 11
	declaration_list : declaration_list declaration .  (2)

	.  reduce 2


state 12
	id : ID .  (13)

	.  reduce 13


state 13
	var_declaration : type_specifier id . SEMI
	var_declaration : type_specifier id . LBRACKET NUM $$1 RBRACKET SEMI
	fun_declaration : type_specifier id . LPAREN params RPAREN compound_stmt
	fun_declaration : type_specifier id . LPAREN VOID RPAREN compound_stmt
	fun_declaration : type_specifier id . LPAREN RPAREN compound_stmt

	LBRACKET  shift 14
	LPAREN  shift 15
	SEMI  shift 16


state 14
	var_declaration : type_specifier id LBRACKET . NUM $$1 RBRACKET SEMI

	NUM  shift 17


state 15
	fun_declaration : type_specifier id LPAREN . params RPAREN compound_stmt
	fun_declaration : type_specifier id LPAREN . VOID RPAREN compound_stmt
	fun_declaration : type_specifier id LPAREN . RPAREN compound_stmt

	INT  shift 1
	CHAR  shift 2
	FLOAT  shift 3
	VOID  shift 18
	RPAREN  shift 19

	type_specifier goto 20
	params goto 21
	param_list goto 22
	param goto 23


state 16
	var_declaration : type_specifier id SEMI .  (6)

	.  reduce 6


state 17
	var_declaration : type_specifier id LBRACKET NUM . $$1 RBRACKET SEMI
	$$1 : .  (7)

	.  reduce 7

	$$1 goto 24


state 18
	type_specifier : VOID .  (12)
	fun_declaration : type_specifier id LPAREN VOID . RPAREN compound_stmt

	RPAREN  shift 25
	.  reduce 12


state 19
	fun_declaration : type_specifier id LPAREN RPAREN . compound_stmt

	LBC  shift 26

	compound_stmt goto 27


state 20
	param : type_specifier . id
	param : type_specifier . id LBRACKET RBRACKET

	ID  shift 12

	id goto 28


state 21
	fun_declaration : type_specifier id LPAREN params . RPAREN compound_stmt

	RPAREN  shift 29


state 22
	params : param_list .  (17)
	param_list : param_list . COMMA param

	COMMA  shift 30
	.  reduce 17


state 23
	param_list : param .  (19)

	.  reduce 19


state 24
	var_declaration : type_specifier id LBRACKET NUM $$1 . RBRACKET SEMI

	RBRACKET  shift 31


state 25
	fun_declaration : type_specifier id LPAREN VOID RPAREN . compound_stmt

	LBC  shift 26

	compound_stmt goto 32


state 26
	compound_stmt : LBC . local_declarations RBC
	compound_stmt : LBC . local_declarations statement_list RBC
	compound_stmt : LBC . RBC
	compound_stmt : LBC . statement_list RBC

	INT  shift 1
	CHAR  shift 2
	FLOAT  shift 3
	VOID  shift 4
	NUM  shift 33
	FLOATNUM  shift 34
	CONSTCHAR  shift 35
	ID  shift 12
	IF  shift 36
	WHILE  shift 37
	BREAK  shift 38
	RETURN  shift 39
	LPAREN  shift 40
	LBC  shift 26
	RBC  shift 41
	SEMI  shift 42
	NOT  shift 43

	var_declaration goto 44
	type_specifier goto 45
	id goto 46
	compound_stmt goto 47
	local_declarations goto 48
	statement_list goto 49
	statement goto 50
	expression_stmt goto 51
	if_stmt goto 52
	while_stmt goto 53
	return_stmt goto 54
	assign_stmt goto 55
	break_stmt goto 56
	expression goto 57
	var goto 58
	or_expression goto 59
	and_expression goto 60
	simple_expression goto 61
	additive_expression goto 62
	term goto 63
	factor goto 64
	call goto 65


state 27
	fun_declaration : type_specifier id LPAREN RPAREN compound_stmt .  (16)

	.  reduce 16


state 28
	param : type_specifier id .  (20)
	param : type_specifier id . LBRACKET RBRACKET

	LBRACKET  shift 66
	.  reduce 20


state 29
	fun_declaration : type_specifier id LPAREN params RPAREN . compound_stmt

	LBC  shift 26

	compound_stmt goto 67


state 30
	param_list : param_list COMMA . param

	INT  shift 1
	CHAR  shift 2
	FLOAT  shift 3
	VOID  shift 4

	type_specifier goto 20
	param goto 68


state 31
	var_declaration : type_specifier id LBRACKET NUM $$1 RBRACKET . SEMI

	SEMI  shift 69


state 32
	fun_declaration : type_specifier id LPAREN VOID RPAREN compound_stmt .  (15)

	.  reduce 15


state 33
	factor : NUM .  (69)

	.  reduce 69


state 34
	factor : FLOATNUM .  (70)

	.  reduce 70


state 35
	factor : CONSTCHAR .  (71)

	.  reduce 71


state 36
	if_stmt : IF . LPAREN expression RPAREN statement ELSE statement
	if_stmt : IF . LPAREN expression RPAREN statement

	LPAREN  shift 70


state 37
	while_stmt : WHILE . LPAREN expression RPAREN statement

	LPAREN  shift 71


state 38
	break_stmt : BREAK . SEMI

	SEMI  shift 72


state 39
	return_stmt : RETURN . SEMI
	return_stmt : RETURN . expression SEMI

	NUM  shift 33
	FLOATNUM  shift 34
	CONSTCHAR  shift 35
	ID  shift 12
	LPAREN  shift 40
	SEMI  shift 73
	NOT  shift 43

	id goto 46
	expression goto 74
	var goto 75
	or_expression goto 59
	and_expression goto 60
	simple_expression goto 61
	additive_expression goto 62
	term goto 63
	factor goto 64
	call goto 65


state 40
	factor : LPAREN . expression RPAREN

	NUM  shift 33
	FLOATNUM  shift 34
	CONSTCHAR  shift 35
	ID  shift 12
	LPAREN  shift 40
	NOT  shift 43

	id goto 46
	expression goto 76
	var goto 75
	or_expression goto 59
	and_expression goto 60
	simple_expression goto 61
	additive_expression goto 62
	term goto 63
	factor goto 64
	call goto 65


state 41
	compound_stmt : LBC RBC .  (24)

	.  reduce 24


state 42
	expression_stmt : SEMI .  (38)

	.  reduce 38


state 43
	factor : NOT . factor

	NUM  shift 33
	FLOATNUM  shift 34
	CONSTCHAR  shift 35
	ID  shift 12
	LPAREN  shift 40
	NOT  shift 43

	id goto 46
	var goto 75
	factor goto 77
	call goto 65


state 44
	local_declarations : var_declaration .  (27)

	.  reduce 27


state 45
	var_declaration : type_specifier . id SEMI
	var_declaration : type_specifier . id LBRACKET NUM $$1 RBRACKET SEMI

	ID  shift 12

	id goto 78


state 46
	var : id .  (46)
	var : id . LBRACKET expression RBRACKET
	call : id . LPAREN args RPAREN
	call : id . LPAREN RPAREN

	LBRACKET  shift 79
	LPAREN  shift 80
	.  reduce 46


state 47
	statement : compound_stmt .  (31)

	.  reduce 31


state 48
	compound_stmt : LBC local_declarations . RBC
	compound_stmt : LBC local_declarations . statement_list RBC
	local_declarations : local_declarations . var_declaration

	INT  shift 1
	CHAR  shift 2
	FLOAT  shift 3
	VOID  shift 4
	NUM  shift 33
	FLOATNUM  shift 34
	CONSTCHAR  shift 35
	ID  shift 12
	IF  shift 36
	WHILE  shift 37
	BREAK  shift 38
	RETURN  shift 39
	LPAREN  shift 40
	LBC  shift 26
	RBC  shift 81
	SEMI  shift 42
	NOT  shift 43

	var_declaration goto 82
	type_specifier goto 45
	id goto 46
	compound_stmt goto 47
	statement_list goto 83
	statement goto 50
	expression_stmt goto 51
	if_stmt goto 52
	while_stmt goto 53
	return_stmt goto 54
	assign_stmt goto 55
	break_stmt goto 56
	expression goto 57
	var goto 58
	or_expression goto 59
	and_expression goto 60
	simple_expression goto 61
	additive_expression goto 62
	term goto 63
	factor goto 64
	call goto 65


state 49
	compound_stmt : LBC statement_list . RBC
	statement_list : statement_list . statement

	NUM  shift 33
	FLOATNUM  shift 34
	CONSTCHAR  shift 35
	ID  shift 12
	IF  shift 36
	WHILE  shift 37
	BREAK  shift 38
	RETURN  shift 39
	LPAREN  shift 40
	LBC  shift 26
	RBC  shift 84
	SEMI  shift 42
	NOT  shift 43

	id goto 46
	compound_stmt goto 47
	statement goto 85
	expression_stmt goto 51
	if_stmt goto 52
	while_stmt goto 53
	return_stmt goto 54
	assign_stmt goto 55
	break_stmt goto 56
	expression goto 57
	var goto 58
	or_expression goto 59
	and_expression goto 60
	simple_expression goto 61
	additive_expression goto 62
	term goto 63
	factor goto 64
	call goto 65


state 50
	statement_list : statement .  (29)

	.  reduce 29


state 51
	statement : expression_stmt .  (30)

	.  reduce 30


state 52
	statement : if_stmt .  (32)

	.  reduce 32


state 53
	statement : while_stmt .  (33)

	.  reduce 33


state 54
	statement : return_stmt .  (34)

	.  reduce 34


state 55
	statement : assign_stmt .  (35)

	.  reduce 35


state 56
	statement : break_stmt .  (36)

	.  reduce 36


state 57
	expression_stmt : expression . SEMI

	SEMI  shift 86


state 58
	assign_stmt : var . ASSIGN expression SEMI
	factor : var .  (67)

	ASSIGN  shift 87
	.  reduce 67


state 59
	expression : or_expression .  (48)
	or_expression : or_expression . OR and_expression

	OR  shift 88
	.  reduce 48


state 60
	or_expression : and_expression .  (50)
	and_expression : and_expression . AND simple_expression

	AND  shift 89
	.  reduce 50


state 61
	and_expression : simple_expression .  (52)

	.  reduce 52


state 62
	simple_expression : additive_expression . GE additive_expression
	simple_expression : additive_expression . GT additive_expression
	simple_expression : additive_expression . LE additive_expression
	simple_expression : additive_expression . LT additive_expression
	simple_expression : additive_expression . EQ additive_expression
	simple_expression : additive_expression . NE additive_expression
	simple_expression : additive_expression .  (59)
	additive_expression : additive_expression . PLUS term
	additive_expression : additive_expression . MINUS term

	EQ  shift 90
	LT  shift 91
	LE  shift 92
	GT  shift 93
	GE  shift 94
	NE  shift 95
	PLUS  shift 96
	MINUS  shift 97
	.  reduce 59


state 63
	additive_expression : term .  (62)
	term : term . TIMES factor
	term : term . OVER factor

	TIMES  shift 98
	OVER  shift 99
	.  reduce 62


state 64
	term : factor .  (65)

	.  reduce 65


state 65
	factor : call .  (68)

	.  reduce 68


state 66
	param : type_specifier id LBRACKET . RBRACKET

	RBRACKET  shift 100


state 67
	fun_declaration : type_specifier id LPAREN params RPAREN compound_stmt .  (14)

	.  reduce 14


state 68
	param_list : param_list COMMA param .  (18)

	.  reduce 18


state 69
	var_declaration : type_specifier id LBRACKET NUM $$1 RBRACKET SEMI .  (8)

	.  reduce 8


state 70
	if_stmt : IF LPAREN . expression RPAREN statement ELSE statement
	if_stmt : IF LPAREN . expression RPAREN statement

	NUM  shift 33
	FLOATNUM  shift 34

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -