-
Notifications
You must be signed in to change notification settings - Fork 0
/
grammar2.txt
92 lines (70 loc) · 1.81 KB
/
grammar2.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
chunk : (statement (";")?)* (laststatement (";")?)?
block : chunk
statement : variablelist "=" expressionlist
| functioncall
| "do" block "end"
| "while" expression "do" block "end"
| "repeat" block "until" expression
| "if" expression "then" block ("elseif" expression "then" block)* ("else" block)? "end"
| "for" NAME "=" expression "," expression ("," expression)? "do" block "end"
| "for" namelist "in" expressionlist "do" block "end"
| "function" functionname functionbody
| "local" "function" NAME functionbody
| "local" namelist ("=" expressionlist)?
laststatement : "return" (expressionlist)? | "break"
functionname : NAME ("." NAME)* (":" NAME)?
variablelist : variable ("," variable)*
variable : NAME
| prefixexpression "[" expression "]"
| prefixexpression "." NAME
namelist : NAME ("," NAME)*
expressionlist : (expression ",")* expression
expression : "nil"
| "false"
| "true"
| NUMBER
| string
| "..."
| function
| prefixexpression
| tableconstructor
| expression binaryoperator expression
| unaryoperator expression
string : NAME
prefixexpression : variable
| functioncall
| "(" expression ")"
functioncall : prefixexpression arguments
| prefixexpression ":" NAME arguments
arguments : "(" (expressionlist)? ")"
| tableconstructor
| string
function : "function" functionbody
functionbody : "(" (parameterlist)? ")" block "end"
parameterlist : namelist ("," "...")?
| "..."
tableconstructor : "{" (fieldlist)? "}"
fieldlist : field (fieldseparator field)* (fieldseparator)?
field : "[" expression "]" "=" expression
| NAME "=" expression
| expression
fieldseparator : ","
| ";"
binaryoperator : "+"
| "-"
| "*"
| "/"
| "^"
| "%"
| ".."
| "<"
| "<="
| ">"
| ">="
| "=="
| "~="
| "and"
| "or"
unaryoperator : "-"
| "not"
| "#"