This repository was archived by the owner on Jun 27, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathactual_grammar
executable file
·76 lines (46 loc) · 1.89 KB
/
actual_grammar
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
chunk ::= { stat [ `;´ ] } [ laststat [ `;´ ] ]
exp ::= nil exp_p | false exp_p | true exp_p | Number exp_p | String exp_p | `...´ exp_p | functiondef exp_p |
prefixexp exp_p | tableconstructor exp_p | unop exp exp_p
# is this same as [ binop exp exp_p ]
exp_p ::= [ binop exp exp_p ]
stat ::=
Name { exp_args_back } stat_name |
`(´ exp `)´ { exp_args_back } stat_name_eap |
do block end |
while exp do block end |
repeat block until exp |
if exp then block { elseif exp then block } [ else block ] end |
for stat_for |
function funcname funcbody |
local stat_local
##
stat_name ::= stat_name_eap | end_explist
stat_name_eap ::= exp_back end_explist |
args_back
##
end_explist ::= { `,´ var } `=´ explist
prefixexp ::= Name { exp_args_back } | `(´ exp `)´ { exp_args_back }
var ::= exp_front { exp_args_back } exp_back | Name
exp_args_back ::= exp_back | args_back
exp_front ::= Name | `(´ exp `)´
exp_back ::= `[´ exp `]´ | `.´ Name
args_back ::= args | `:´ Name args
args ::= `(´ [ explist ] `)´ | tableconstructor | String
block ::= chunk
stat_local ::= function Name funcbody | namelist [ `=´ explist ]
stat_for ::= Name `=´ exp `,´ exp [ `,´ exp ] do block end | namelist in explist do block end
functiondef ::= function funcbody
funcbody ::= `(´ [ parlist ] `)´ block end
laststat ::= return [ explist ] | break
explist ::= exp { `,´ exp }
tableconstructor ::= `{´ [ fieldlist ] `}´
fieldlist ::= field { fieldsep field } [ fieldsep ]
field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
funcname ::= Name { `.´ Name } [ `:´ Name ]
namelist ::= Name { `,´ Name }
parlist ::= namelist [ `,´ `...´ ] | `...´
fieldsep ::= `,´ | `;´
binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ |
`<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ |
and | or
unop ::= `-´ | not | `#´