788 lines
15 KiB
Coq
788 lines
15 KiB
Coq
0 $accept : program $end
|
|
|
|
1 program : statement_list
|
|
|
|
2 statement_list : statement_list statement
|
|
3 |
|
|
|
|
4 statement : END_STMT
|
|
5 | STOP END_STMT
|
|
6 | PAUSE END_STMT
|
|
7 | PRINT OPEN_PAR expression CLOSE_PAR END_STMT
|
|
8 | assign_expression END_STMT
|
|
9 | IF OPEN_PAR conditional CLOSE_PAR statement
|
|
10 | IF OPEN_PAR conditional CLOSE_PAR statement ELSE statement
|
|
11 | WHILE OPEN_PAR conditional CLOSE_PAR statement
|
|
12 | DO statement WHILE OPEN_PAR conditional CLOSE_PAR END_STMT
|
|
13 | BEGIN_CS statement_list END_CS
|
|
14 | function END_STMT
|
|
|
|
15 assign_expression : variable ASSIGN expression
|
|
|
|
16 conditional : expression EQUAL expression
|
|
17 | expression NOTEQUAL expression
|
|
18 | expression LESSTHAN expression
|
|
19 | expression GREATERTHAN expression
|
|
|
|
20 variable : VARIABLE
|
|
|
|
21 expression : VALUE
|
|
22 | OPEN_PAR expression CLOSE_PAR
|
|
23 | VARIABLE
|
|
24 | expression PLUS expression
|
|
25 | expression SUBTRACT expression
|
|
26 | expression MULTIPLY expression
|
|
27 | expression DIVIDE expression
|
|
28 | function
|
|
|
|
29 $$1 :
|
|
|
|
30 function : FUNCTION OPEN_PAR $$1 CLOSE_PAR
|
|
|
|
|
|
state 0
|
|
$accept : . program $end
|
|
statement_list : . (3)
|
|
|
|
. reduce 3
|
|
|
|
program goto 1
|
|
statement_list goto 2
|
|
|
|
|
|
state 1
|
|
$accept : program . $end (0)
|
|
|
|
$end accept
|
|
|
|
|
|
state 2
|
|
program : statement_list . (1)
|
|
statement_list : statement_list . statement
|
|
|
|
STOP shift 3
|
|
IF shift 4
|
|
WHILE shift 5
|
|
DO shift 6
|
|
PAUSE shift 7
|
|
PRINT shift 8
|
|
END_STMT shift 9
|
|
BEGIN_CS shift 10
|
|
VARIABLE shift 11
|
|
FUNCTION shift 12
|
|
. reduce 1
|
|
|
|
statement goto 13
|
|
assign_expression goto 14
|
|
variable goto 15
|
|
function goto 16
|
|
|
|
|
|
state 3
|
|
statement : STOP . END_STMT
|
|
|
|
END_STMT shift 17
|
|
|
|
|
|
state 4
|
|
statement : IF . OPEN_PAR conditional CLOSE_PAR statement
|
|
statement : IF . OPEN_PAR conditional CLOSE_PAR statement ELSE statement
|
|
|
|
OPEN_PAR shift 18
|
|
|
|
|
|
state 5
|
|
statement : WHILE . OPEN_PAR conditional CLOSE_PAR statement
|
|
|
|
OPEN_PAR shift 19
|
|
|
|
|
|
state 6
|
|
statement : DO . statement WHILE OPEN_PAR conditional CLOSE_PAR END_STMT
|
|
|
|
STOP shift 3
|
|
IF shift 4
|
|
WHILE shift 5
|
|
DO shift 6
|
|
PAUSE shift 7
|
|
PRINT shift 8
|
|
END_STMT shift 9
|
|
BEGIN_CS shift 10
|
|
VARIABLE shift 11
|
|
FUNCTION shift 12
|
|
|
|
statement goto 20
|
|
assign_expression goto 14
|
|
variable goto 15
|
|
function goto 16
|
|
|
|
|
|
state 7
|
|
statement : PAUSE . END_STMT
|
|
|
|
END_STMT shift 21
|
|
|
|
|
|
state 8
|
|
statement : PRINT . OPEN_PAR expression CLOSE_PAR END_STMT
|
|
|
|
OPEN_PAR shift 22
|
|
|
|
|
|
state 9
|
|
statement : END_STMT . (4)
|
|
|
|
. reduce 4
|
|
|
|
|
|
state 10
|
|
statement : BEGIN_CS . statement_list END_CS
|
|
statement_list : . (3)
|
|
|
|
. reduce 3
|
|
|
|
statement_list goto 23
|
|
|
|
|
|
state 11
|
|
variable : VARIABLE . (20)
|
|
|
|
. reduce 20
|
|
|
|
|
|
state 12
|
|
function : FUNCTION . OPEN_PAR $$1 CLOSE_PAR
|
|
|
|
OPEN_PAR shift 24
|
|
|
|
|
|
state 13
|
|
statement_list : statement_list statement . (2)
|
|
|
|
. reduce 2
|
|
|
|
|
|
state 14
|
|
statement : assign_expression . END_STMT
|
|
|
|
END_STMT shift 25
|
|
|
|
|
|
state 15
|
|
assign_expression : variable . ASSIGN expression
|
|
|
|
ASSIGN shift 26
|
|
|
|
|
|
state 16
|
|
statement : function . END_STMT
|
|
|
|
END_STMT shift 27
|
|
|
|
|
|
state 17
|
|
statement : STOP END_STMT . (5)
|
|
|
|
. reduce 5
|
|
|
|
|
|
state 18
|
|
statement : IF OPEN_PAR . conditional CLOSE_PAR statement
|
|
statement : IF OPEN_PAR . conditional CLOSE_PAR statement ELSE statement
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
conditional goto 31
|
|
expression goto 32
|
|
function goto 33
|
|
|
|
|
|
state 19
|
|
statement : WHILE OPEN_PAR . conditional CLOSE_PAR statement
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
conditional goto 34
|
|
expression goto 32
|
|
function goto 33
|
|
|
|
|
|
state 20
|
|
statement : DO statement . WHILE OPEN_PAR conditional CLOSE_PAR END_STMT
|
|
|
|
WHILE shift 35
|
|
|
|
|
|
state 21
|
|
statement : PAUSE END_STMT . (6)
|
|
|
|
. reduce 6
|
|
|
|
|
|
state 22
|
|
statement : PRINT OPEN_PAR . expression CLOSE_PAR END_STMT
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 36
|
|
function goto 33
|
|
|
|
|
|
state 23
|
|
statement_list : statement_list . statement
|
|
statement : BEGIN_CS statement_list . END_CS
|
|
|
|
STOP shift 3
|
|
IF shift 4
|
|
WHILE shift 5
|
|
DO shift 6
|
|
PAUSE shift 7
|
|
PRINT shift 8
|
|
END_STMT shift 9
|
|
BEGIN_CS shift 10
|
|
END_CS shift 37
|
|
VARIABLE shift 11
|
|
FUNCTION shift 12
|
|
|
|
statement goto 13
|
|
assign_expression goto 14
|
|
variable goto 15
|
|
function goto 16
|
|
|
|
|
|
state 24
|
|
function : FUNCTION OPEN_PAR . $$1 CLOSE_PAR
|
|
$$1 : . (29)
|
|
|
|
. reduce 29
|
|
|
|
$$1 goto 38
|
|
|
|
|
|
state 25
|
|
statement : assign_expression END_STMT . (8)
|
|
|
|
. reduce 8
|
|
|
|
|
|
state 26
|
|
assign_expression : variable ASSIGN . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 39
|
|
function goto 33
|
|
|
|
|
|
state 27
|
|
statement : function END_STMT . (14)
|
|
|
|
. reduce 14
|
|
|
|
|
|
state 28
|
|
expression : OPEN_PAR . expression CLOSE_PAR
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 40
|
|
function goto 33
|
|
|
|
|
|
state 29
|
|
expression : VARIABLE . (23)
|
|
|
|
. reduce 23
|
|
|
|
|
|
state 30
|
|
expression : VALUE . (21)
|
|
|
|
. reduce 21
|
|
|
|
|
|
state 31
|
|
statement : IF OPEN_PAR conditional . CLOSE_PAR statement
|
|
statement : IF OPEN_PAR conditional . CLOSE_PAR statement ELSE statement
|
|
|
|
CLOSE_PAR shift 41
|
|
|
|
|
|
state 32
|
|
conditional : expression . EQUAL expression
|
|
conditional : expression . NOTEQUAL expression
|
|
conditional : expression . LESSTHAN expression
|
|
conditional : expression . GREATERTHAN expression
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
EQUAL shift 42
|
|
NOTEQUAL shift 43
|
|
LESSTHAN shift 44
|
|
GREATERTHAN shift 45
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
|
|
|
|
state 33
|
|
expression : function . (28)
|
|
|
|
. reduce 28
|
|
|
|
|
|
state 34
|
|
statement : WHILE OPEN_PAR conditional . CLOSE_PAR statement
|
|
|
|
CLOSE_PAR shift 50
|
|
|
|
|
|
state 35
|
|
statement : DO statement WHILE . OPEN_PAR conditional CLOSE_PAR END_STMT
|
|
|
|
OPEN_PAR shift 51
|
|
|
|
|
|
state 36
|
|
statement : PRINT OPEN_PAR expression . CLOSE_PAR END_STMT
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
CLOSE_PAR shift 52
|
|
|
|
|
|
state 37
|
|
statement : BEGIN_CS statement_list END_CS . (13)
|
|
|
|
. reduce 13
|
|
|
|
|
|
state 38
|
|
function : FUNCTION OPEN_PAR $$1 . CLOSE_PAR
|
|
|
|
CLOSE_PAR shift 53
|
|
|
|
|
|
state 39
|
|
assign_expression : variable ASSIGN expression . (15)
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 15
|
|
|
|
|
|
state 40
|
|
expression : OPEN_PAR expression . CLOSE_PAR
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
CLOSE_PAR shift 54
|
|
|
|
|
|
state 41
|
|
statement : IF OPEN_PAR conditional CLOSE_PAR . statement
|
|
statement : IF OPEN_PAR conditional CLOSE_PAR . statement ELSE statement
|
|
|
|
STOP shift 3
|
|
IF shift 4
|
|
WHILE shift 5
|
|
DO shift 6
|
|
PAUSE shift 7
|
|
PRINT shift 8
|
|
END_STMT shift 9
|
|
BEGIN_CS shift 10
|
|
VARIABLE shift 11
|
|
FUNCTION shift 12
|
|
|
|
statement goto 55
|
|
assign_expression goto 14
|
|
variable goto 15
|
|
function goto 16
|
|
|
|
|
|
state 42
|
|
conditional : expression EQUAL . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 56
|
|
function goto 33
|
|
|
|
|
|
state 43
|
|
conditional : expression NOTEQUAL . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 57
|
|
function goto 33
|
|
|
|
|
|
state 44
|
|
conditional : expression LESSTHAN . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 58
|
|
function goto 33
|
|
|
|
|
|
state 45
|
|
conditional : expression GREATERTHAN . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 59
|
|
function goto 33
|
|
|
|
|
|
state 46
|
|
expression : expression PLUS . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 60
|
|
function goto 33
|
|
|
|
|
|
state 47
|
|
expression : expression SUBTRACT . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 61
|
|
function goto 33
|
|
|
|
|
|
state 48
|
|
expression : expression MULTIPLY . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 62
|
|
function goto 33
|
|
|
|
|
|
state 49
|
|
expression : expression DIVIDE . expression
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
expression goto 63
|
|
function goto 33
|
|
|
|
|
|
state 50
|
|
statement : WHILE OPEN_PAR conditional CLOSE_PAR . statement
|
|
|
|
STOP shift 3
|
|
IF shift 4
|
|
WHILE shift 5
|
|
DO shift 6
|
|
PAUSE shift 7
|
|
PRINT shift 8
|
|
END_STMT shift 9
|
|
BEGIN_CS shift 10
|
|
VARIABLE shift 11
|
|
FUNCTION shift 12
|
|
|
|
statement goto 64
|
|
assign_expression goto 14
|
|
variable goto 15
|
|
function goto 16
|
|
|
|
|
|
state 51
|
|
statement : DO statement WHILE OPEN_PAR . conditional CLOSE_PAR END_STMT
|
|
|
|
OPEN_PAR shift 28
|
|
VARIABLE shift 29
|
|
VALUE shift 30
|
|
FUNCTION shift 12
|
|
|
|
conditional goto 65
|
|
expression goto 32
|
|
function goto 33
|
|
|
|
|
|
state 52
|
|
statement : PRINT OPEN_PAR expression CLOSE_PAR . END_STMT
|
|
|
|
END_STMT shift 66
|
|
|
|
|
|
state 53
|
|
function : FUNCTION OPEN_PAR $$1 CLOSE_PAR . (30)
|
|
|
|
. reduce 30
|
|
|
|
|
|
state 54
|
|
expression : OPEN_PAR expression CLOSE_PAR . (22)
|
|
|
|
. reduce 22
|
|
|
|
|
|
55: shift-reduce conflict (shift 67, reduce 9) on ELSE
|
|
state 55
|
|
statement : IF OPEN_PAR conditional CLOSE_PAR statement . (9)
|
|
statement : IF OPEN_PAR conditional CLOSE_PAR statement . ELSE statement
|
|
|
|
ELSE shift 67
|
|
. reduce 9
|
|
|
|
|
|
state 56
|
|
conditional : expression EQUAL expression . (16)
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 16
|
|
|
|
|
|
state 57
|
|
conditional : expression NOTEQUAL expression . (17)
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 17
|
|
|
|
|
|
state 58
|
|
conditional : expression LESSTHAN expression . (18)
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 18
|
|
|
|
|
|
state 59
|
|
conditional : expression GREATERTHAN expression . (19)
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 19
|
|
|
|
|
|
60: shift-reduce conflict (shift 46, reduce 24) on PLUS
|
|
60: shift-reduce conflict (shift 47, reduce 24) on SUBTRACT
|
|
60: shift-reduce conflict (shift 48, reduce 24) on MULTIPLY
|
|
60: shift-reduce conflict (shift 49, reduce 24) on DIVIDE
|
|
state 60
|
|
expression : expression PLUS expression . (24)
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 24
|
|
|
|
|
|
61: shift-reduce conflict (shift 46, reduce 25) on PLUS
|
|
61: shift-reduce conflict (shift 47, reduce 25) on SUBTRACT
|
|
61: shift-reduce conflict (shift 48, reduce 25) on MULTIPLY
|
|
61: shift-reduce conflict (shift 49, reduce 25) on DIVIDE
|
|
state 61
|
|
expression : expression . PLUS expression
|
|
expression : expression SUBTRACT expression . (25)
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 25
|
|
|
|
|
|
62: shift-reduce conflict (shift 46, reduce 26) on PLUS
|
|
62: shift-reduce conflict (shift 47, reduce 26) on SUBTRACT
|
|
62: shift-reduce conflict (shift 48, reduce 26) on MULTIPLY
|
|
62: shift-reduce conflict (shift 49, reduce 26) on DIVIDE
|
|
state 62
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression MULTIPLY expression . (26)
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 26
|
|
|
|
|
|
63: shift-reduce conflict (shift 46, reduce 27) on PLUS
|
|
63: shift-reduce conflict (shift 47, reduce 27) on SUBTRACT
|
|
63: shift-reduce conflict (shift 48, reduce 27) on MULTIPLY
|
|
63: shift-reduce conflict (shift 49, reduce 27) on DIVIDE
|
|
state 63
|
|
expression : expression . PLUS expression
|
|
expression : expression . SUBTRACT expression
|
|
expression : expression . MULTIPLY expression
|
|
expression : expression DIVIDE expression . (27)
|
|
expression : expression . DIVIDE expression
|
|
|
|
PLUS shift 46
|
|
SUBTRACT shift 47
|
|
MULTIPLY shift 48
|
|
DIVIDE shift 49
|
|
. reduce 27
|
|
|
|
|
|
state 64
|
|
statement : WHILE OPEN_PAR conditional CLOSE_PAR statement . (11)
|
|
|
|
. reduce 11
|
|
|
|
|
|
state 65
|
|
statement : DO statement WHILE OPEN_PAR conditional . CLOSE_PAR END_STMT
|
|
|
|
CLOSE_PAR shift 68
|
|
|
|
|
|
state 66
|
|
statement : PRINT OPEN_PAR expression CLOSE_PAR END_STMT . (7)
|
|
|
|
. reduce 7
|
|
|
|
|
|
state 67
|
|
statement : IF OPEN_PAR conditional CLOSE_PAR statement ELSE . statement
|
|
|
|
STOP shift 3
|
|
IF shift 4
|
|
WHILE shift 5
|
|
DO shift 6
|
|
PAUSE shift 7
|
|
PRINT shift 8
|
|
END_STMT shift 9
|
|
BEGIN_CS shift 10
|
|
VARIABLE shift 11
|
|
FUNCTION shift 12
|
|
|
|
statement goto 69
|
|
assign_expression goto 14
|
|
variable goto 15
|
|
function goto 16
|
|
|
|
|
|
state 68
|
|
statement : DO statement WHILE OPEN_PAR conditional CLOSE_PAR . END_STMT
|
|
|
|
END_STMT shift 70
|
|
|
|
|
|
state 69
|
|
statement : IF OPEN_PAR conditional CLOSE_PAR statement ELSE statement . (10)
|
|
|
|
. reduce 10
|
|
|
|
|
|
state 70
|
|
statement : DO statement WHILE OPEN_PAR conditional CLOSE_PAR END_STMT . (12)
|
|
|
|
. reduce 12
|
|
|
|
|
|
State 55 contains 1 shift-reduce conflict
|
|
State 60 contains 4 shift-reduce conflicts
|
|
State 61 contains 4 shift-reduce conflicts
|
|
State 62 contains 4 shift-reduce conflicts
|
|
State 63 contains 4 shift-reduce conflicts
|
|
|
|
|
|
26 tokens, 10 nonterminals
|
|
31 grammar rules, 71 states
|