-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbnf.txt
121 lines (97 loc) · 2.5 KB
/
bnf.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
program ::= includes_list construct_list EOF
construct ::= structdecl
| vardecl
| funcdecl
| funcdefn
construct_list ::= construct construct_list
| ε
includes_list ::= include includes_list
| ε
include ::= Include LitString
structdecl ::= Struct Ident LBrace vardecl vardecl_list RBrace Semi
vardecl_list ::= vardecl vardecl_list
| ε
vardecl := type Ident array_sizes Semi
funcdecl ::= type Ident LParen formals RParen Semi
| type Ident LParen RParen Semi
funcdefn ::= type Ident LParen formals RParen block
| type Ident LParen RParen block
type ::= primitive_type
| struct_type
primitive_type ::= (Type BuiltinType) stars
struct_type ::= Struct Ident stars
sizeof_type ::= type array_sizes
BuiltinType ::= Int
| Double
| Char
| Void
formals ::= formals Comma formal
| formal
formal ::= type Ident
stmt ::= expr Semi
| block
| While LParen expr RParen stmt
| For LParen opt_expr Semi opt_expr Semi opt_expr RParen stmt
| If LParen expr RParen stmt
| If LParen expr RParen stmt Else stmt
| Return opt_expr Semi
| vardecl
block ::= LBrace block_stmts RBrace
block_stmts ::= stmt block_stmts
| ε
opt_expr ::= expr
| ε
expr ::= LitInt
| LitString
| LitChar
| LitDouble
| LitNull
| Ident
| (expr)
| expr op expr
| Minus expr
| Not expr
| arrayaccess
| fieldaccess
| indirect
| deref
| addressof
| funccall
| assign
| sizeof
| typecast
| expr Increment
| expr Decrement
op ::= Less
| Leq
| Greater
| Geq
| Neq
| Equal
| Plus
| Minus
| Div
| Asterisk
| Mod
| Or
| And
| Caret
| Ampers
| Bar
funccall ::= Ident LParen actuals RParen
| Ident LParen RParen
arrayaccess ::= expr LBrack expr RBrack
fieldaccess ::= expr Dot Ident
indirect ::= expr Arrow Ident
deref ::= Asterisk expr
addressof ::= Ampers expr
sizeof ::= Sizeof LParen type RParen
| Sizeof LParen expr RParen
typecast ::= LParen type RParen expr
assign ::= expr Assign expr
actuals ::= expr
| actuals ',' expr
array_sizes ::= array_sizes LBrack LitInt RBrack
| ε
stars ::= Asterisk stars
| ε