-
Notifications
You must be signed in to change notification settings - Fork 1
/
grammar.txt
92 lines (92 loc) · 3.48 KB
/
grammar.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Program -> Declaration-list $
Declaration-list -> Declaration Declaration-list
Declaration-list -> ε
Declaration -> #declare Declaration-initial Declaration-prime #pop
Declaration-initial -> Type-specifier #declare_id #pid ID
Declaration-prime -> Fun-declaration-prime
Declaration-prime -> Var-declaration-prime
Var-declaration-prime -> ;
Var-declaration-prime -> [ #pnum NUM ] #declare_arr ;
Fun-declaration-prime -> #declare_func #set_exec #scmod_t #sc_start ( #arg_init Params #arg_finish ) #scmod_f #sc_start Compound-stmt #sc_stop #scmod_f #sc_stop #scmod_t #return
Type-specifier -> int
Type-specifier -> void
Params -> #declare int #declare_id #pid ID Param-prime #pop Param-list
Params -> void Param-list-void-abtar
Param-list-void-abtar -> #declare_id #pid ID Param-prime Param-list
Param-list-void-abtar -> ε
Param-list -> , Param Param-list
Param-list -> ε
Param -> #declare Declaration-initial Param-prime #pop
Param-prime -> [ ]
Param-prime -> ε
Compound-stmt -> { Declaration-list Statement-list }
Statement-list -> Statement Statement-list
Statement-list -> ε
Statement -> Expression-stmt
Statement -> Compound-stmt
Statement -> Selection-stmt
Statement -> Iteration-stmt
Statement -> Return-stmt
Statement -> Switch-stmt
Expression-stmt -> Expression #pop ;
Expression-stmt -> break #scmod_c #prison ;
Expression-stmt -> ;
Selection-stmt -> if ( Expression ) #hold #scmod_s #sc_start Statement #sc_stop #scmod_s #scmod_t #prison #decide else #scmod_s #sc_start Statement #sc_stop #scmod_s #scmod_t #prison_break
Iteration-stmt -> while #label ( Expression ) #hold #scmod_c #sc_start Statement #jump_while #sc_stop #scmod_c #decide
Return-stmt -> return Return-stmt-prime #scmod_f #prison
Return-stmt-prime -> ;
Return-stmt-prime -> #prv Expression #assign #pop ;
Switch-stmt -> switch ( Expression ) { #scmod_c #sc_start Case-stmts Default-stmt #pop #sc_stop #scmod_c }
Case-stmts -> #scmod_s #sc_start Case-stmt #sc_stop #scmod_s Case-stmts
Case-stmts -> ε
Case-stmt -> case #pnum NUM #case #hold : Statement-list #decide
Default-stmt -> default : Statement-list #scmod_c #prison
Default-stmt -> ε
Expression -> Simple-expression-zegond
Expression -> #pid ID B
B -> = Expression #assign
B -> [ Expression ] #parr H
B -> Simple-expression-prime
H -> = Expression #assign
H -> G D C
Simple-expression-zegond -> Additive-expression-zegond C
Simple-expression-prime -> Additive-expression-prime C
C -> Relop Additive-expression #op_exec
C -> ε
Relop -> #op_push <
Relop -> #op_push ==
Additive-expression -> Term D
Additive-expression-prime -> Term-prime D
Additive-expression-zegond -> Term-zegond D
D -> Addop Term #op_exec D
D -> ε
Addop -> #op_push +
Addop -> #op_push -
Term -> Signed-factor G
Term-prime -> Signed-factor-prime G
Term-zegond -> Signed-factor-zegond G
G -> #op_push * Signed-factor #op_exec G
G -> ε
Signed-factor -> + Factor
Signed-factor -> #pzero #op_push - Factor #op_exec
Signed-factor -> Factor
Signed-factor-prime -> Factor-prime
Signed-factor-zegond -> + Factor
Signed-factor-zegond -> #pzero #op_push - Factor #op_exec
Signed-factor-zegond -> Factor-zegond
Factor -> ( Expression )
Factor -> #pid ID Var-call-prime
Factor -> #pnum NUM
Var-call-prime -> ( #arg_pass Args ) #call
Var-call-prime -> Var-prime
Var-prime -> [ Expression ] #parr
Var-prime -> ε
Factor-prime -> ( #arg_pass Args ) #call
Factor-prime -> ε
Factor-zegond -> ( Expression )
Factor-zegond -> #pnum NUM
Args -> Arg-list
Args -> ε
Arg-list -> Expression Arg-list-prime
Arg-list-prime -> , Expression Arg-list-prime
Arg-list-prime -> ε