Skip to content

Commit 27e5eca

Browse files
committed
Use shorter rule names
1 parent 57d4e90 commit 27e5eca

File tree

1 file changed

+65
-69
lines changed

1 file changed

+65
-69
lines changed

docs/extended_bnf.md

Lines changed: 65 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -6,108 +6,104 @@ Complete Lua syntax in [extended BNF][extended bnf], adapted from it’s
66
```ebnf
77
chunk = [block];
88
9-
block = return_statement | statement {statement} [return_statement];
9+
block = retstat | stat {stat} [retstat];
1010
1111
(* statements *)
12-
return_statement = "return" [expression_list] [empty_statement];
12+
retstat = "return" [explist] [emptstat];
1313
14-
statement = empty_statement | variable_assignment | scoped_variable_declaration | function_call
15-
| label_statement | goto_statement | break_statement | do_statement | while_statement | repeat_statement
16-
| if_statement | for_numeric_statement | for_generic_statement | function_definition_statement
17-
| scoped_function_definition_statement;
14+
stat = emptstat | varassign | locvardecl | funccall | labstat | gotstat | brstat
15+
| dostat | whistat | repstat | ifstat | foristat | forstat | funcdefstat | locfuncdefstat;
1816
19-
scoped_function_definition_statement = "local" "function" identifier function_body;
17+
locfuncdefstat = "local" "function" name funcbody;
2018
21-
function_definition_statement = "function" function_identifier function_body;
22-
function_identifier = identifier {"." identifier} [":" identifier];
19+
funcdefstat = "function" funcname funcbody;
20+
funcname = name {"." name} [":" name];
2321
24-
for_generic_statement = "for" identifier_list "in" expression_list "do" [block] "end";
22+
forstat = "for" namelist "in" explist "do" [block] "end";
2523
26-
for_numeric_statement = "for" identifier "=" expression "," expression ["," expression] "do" [block] "end";
24+
foristat = "for" name "=" exp "," exp ["," exp] "do" [block] "end";
2725
28-
if_statement = "if" expression "then" [block] {"elseif" expression "then" [block]}
29-
["else" [block]] "end";
26+
ifstat = "if" exp "then" [block] {"elseif" exp "then" [block]} ["else" [block]] "end";
3027
31-
repeat_statement = "repeat" [block] "until" expression;
28+
repstat = "repeat" [block] "until" exp;
3229
33-
while_statement = "while" expression "do" [block] "end";
30+
whistat = "while" exp "do" [block] "end";
3431
35-
do_statement = "do" [block] "end";
32+
dostat = "do" [block] "end";
3633
37-
break_statement = "break";
34+
brstat = "break";
3835
39-
goto_statement = "goto" identifier;
40-
label_statement = "::" identifier "::";
36+
gotstat = "goto" name;
37+
labstat = "::" name "::";
4138
42-
scoped_variable_declaration = "local" scoped_variable_list ["=" expression_list];
43-
scoped_variable_list = scoped_variable {',' scoped_variable};
44-
scoped_variable = identifier [attribute];
45-
attribute = '<' identifier '>';
39+
locvardecl = "local" locvarlist ["=" explist];
40+
locvarlist = locvar {',' locvar};
41+
locvar = name [attr];
42+
attr = '<' name '>';
4643
47-
variable_assignment = variable_list "=" expression_list;
48-
variable_list = variable {"," variable};
44+
varassign = varlist "=" explist;
45+
varlist = var {"," var};
4946
50-
empty_statement = ";";
47+
emptstat = ";";
5148
5249
(* expressions *)
53-
expression = "nil" | "false" | "true" | number | string | vararg_expression | function_definition
54-
| prefix_expression | table | unary_expression | binary_expression;
50+
exp = "nil" | "false" | "true" | num | str | varargexp | funcdef | prefixexp | table
51+
| unexp | binexp;
5552
56-
prefix_expression = variable | function_call | "(" expression ")";
57-
variable = identifier | prefix_expression "[" expression "]" | prefix_expression "." identifier;
58-
function_call = prefix_expression [":" identifier] argument_list;
59-
argument_list = "(" [expression_list] ")" | table | string;
60-
expression_list = expression {"," expression};
53+
prefixexp = var | funccall | "(" exp ")";
54+
var = name | prefixexp "[" exp "]" | prefixexp "." name;
55+
funccall = prefixexp [":" name] arglist;
56+
arglist = "(" [explist] ")" | table | str;
57+
explist = exp {"," exp};
6158
62-
function_definition = "function" function_body;
63-
function_body = "(" [parameter_list] ")" [block] "end";
64-
parameter_list = identifier_list ["," vararg_expression] | vararg_expression;
65-
identifier_list = identifier {"," identifier};
59+
funcdef = "function" funcbody;
60+
funcbody = "(" [parlist] ")" [block] "end";
61+
parlist = namelist ["," varargexp] | varargexp;
62+
namelist = name {"," name};
6663
67-
vararg_expression = "...";
64+
varargexp = "...";
6865
69-
table = "{" [field_list] "}";
70-
field_list = field {field_separator field} [field_separator];
71-
field = "[" expression "]" "=" expression | identifier "=" expression | expression;
72-
field_separator = "," | ";";
66+
table = "{" [fieldlist] "}";
67+
fieldlist = field {fieldsep field} [fieldsep];
68+
field = "[" exp "]" "=" exp | name "=" exp | exp;
69+
fieldsep = "," | ";";
7370
74-
binary_expression = expression binary_operator expression;
75-
binary_operator = "or" | "and" | "==" | "~=" | "<" | ">" | "<=" | ">=" | "|"
76-
| "~" | "&" | "<<" | ">>" | ".." | "+" | "-" | "*" | "/" | "//" | "%" | "^";
71+
binexp = exp binop exp;
72+
binop = "or" | "and" | "==" | "~=" | "<" | ">" | "<=" | ">=" | "|" | "~" | "&" | "<<" | ">>"
73+
| ".." | "+" | "-" | "*" | "/" | "//" | "%" | "^";
7774
78-
unary_expression = unary_operator expression;
79-
unary_operator = "not" | "#" | "-" | "~";
75+
unexp = unop exp;
76+
unop = "not" | "#" | "-" | "~";
8077
81-
string = "'" {, inline_character - "'"}, "'" | '"' {, inline_character - '"'}, '"'
82-
| multiline_start {, character}, multiline_end;
83-
inline_character = ? any character except a newline ?;
84-
character = ? any character ?;
78+
str = "'" {, inchar - "'"}, "'" | '"' {, inchar - '"'}, '"' | multstart {, char}, multend;
79+
inchar = ? any char except a newline ?;
80+
char = ? any char ?;
8581
86-
number = decimal | hexadecimal;
82+
num = dec | hex;
8783
88-
hexadecimal = ["-"] ("0x" | "0X"), hexadecimal_numeral [, ("p" | "P"), exponent];
89-
hexadecimal_numeral = hexadecimal_digit {, hexadecimal_digit}
90-
| hexadecimal_digit {, hexadecimal_digit}, "." {, hexadecimal_digit}
91-
| {hexadecimal_digit ,} ".", hexadecimal_digit {, hexadecimal_digit};
92-
hexadecimal_digit = ? hexadecimal numeric character ?;
84+
hex = ["-"] ("0x" | "0X"), hexnum [, ("p" | "P"), exponent];
85+
hexnum = hexdigit {, hexdigit}
86+
| hexdigit {, hexdigit}, "." {, hexdigit}
87+
| {hexdigit ,} ".", hexdigit {, hexdigit};
88+
hexdigit = ? hex numeric char ?;
9389
94-
decimal = ["-"] decimal_numeral [, ("e" | "E"), exponent];
95-
decimal_numeral = decimal_digit {, decimal_digit}
96-
| decimal_digit {, decimal_digit}, "." {, decimal_digit}
97-
| {decimal_digit ,} ".", decimal_digit {, decimal_digit};
98-
decimal_digit = ? decimal numeric character ?;
90+
dec = ["-"] decnum [, ("e" | "E"), exponent];
91+
decnum = decdigit {, decdigit}
92+
| decdigit {, decdigit}, "." {, decdigit}
93+
| {decdigit ,} ".", decdigit {, decdigit};
94+
decdigit = ? dec numeric char ?;
9995
100-
exponent = [("+" | "-") ,] decimal_digit {, decimal_digit};
96+
exponent = [("+" | "-") ,] decdigit {, decdigit};
10197
102-
identifier = (letter | "_") {, letter | decimal_digit | "_"};
103-
letter = ? case insensitive alphabetic character ?;
98+
name = (letter | "_") {, letter | decdigit | "_"};
99+
letter = ? case insensitive alphabetic char ?;
104100
105101
(* extras *)
106-
comment = "--" {, inline_character} | "--", multiline_start {, character}, multiline_end;
102+
comment = "--" {, inchar} | "--", multstart {, char}, multend;
107103
108-
(* "start" and "end" must have the same number of equal signs ("=") *)
109-
multiline_start = "[" {, "="}, "[";
110-
multiline_end = "]" {, "="}, "]";
104+
(* "start" and "end" must have the same num of equal signs ("=") *)
105+
multstart = "[" {, "="}, "[";
106+
multend = "]" {, "="}, "]";
111107
```
112108

113109
[extended bnf]: https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form

0 commit comments

Comments
 (0)