附录A Erlang 语法参考
这部分语法参考是 LALR 语法的改编版本。
此语法和严格的 LALR 语法对 match_expr 有不同理解。 match_expr 中等号左边可以是一个模式或者表达式, Erlang 编译器会在语义分析时确定其含义。
类型 | 优先级 | 运算符 |
---|
Nonassoc | 0 | 'catch'. |
Right | 200 | '='. |
Right | 200 | '!'. |
Left | 300 | addop. |
Left | 400 | multop. |
Nonassoc | 500 | prefixop. |
编号 | 非终结符 | 表达式 |
---|
1 | addop | :="+"|"-"|"bor"|"bxor"|"bsl"|"bsr" |
2 | comp_op | :="=="|"/="|"=<"|"<"|">="|">"|"=:="|"=/=" |
3 | mult_op | :="*"|"/"|"div"|"rem"|"band" |
4 | prefix_op | :="+"|"-"|"bnot" |
5 | basic_type | :="atom"|"number"|"string"|"var"|"true" |
6 | pattern | :=basic_type|pattern_list|pattern_tuple |
7 | pattern_list | :="[""]"|"["patternpatterntail"]" |
8 | pattern_tail | :="|"pattern|","patternpattern_tail|ε |
9 | pattern_tuple | :="{""}"|"{"patterns"}" |
10 | patterns | :=pattern|pattern","patterns |
11 | expr | :=basic_type|list|tuple|function_call|expraddopexpr|exprmult_opexpr|prefix_opexpr|"("expr")"|"begin"exprs"end"|"catch"expr|case_expr|if_expr|receive_expr|match_expr|sendexpr |
12 | list | :="[""]"|"["exprexpr_tail"]" |
13 | expr_tail | :="|"expr|","exprexpr_tail|ε |
14 | tuple | :="{""}"|"{"exprs"}" |
15 | function_call | :="atom""("parameter_list")"|"atom"":""atom""("parameter_list")" |
16 | parameter_list | :=exprs|ε |
17 | case_expr | :="case"expr"of"cr_clauses"end" |
18 | cr_clause | :=patternclause_guardclause_body |
19 | cr_clauses | :=cr_clause|cr_clause";"cr_clauses |
20 | if_expr | :="if"if_clauses"end" |
21 | if_clause | :=guardclause_body |
22 | if_clauses | :=if_clause|if_clause";"if_clauses |
23 | receive_expr | :="receive""after"exprclause_body"end"|"receive"cr_clauses"end"|"receive"cr_clauses"after"exprclause_body"end" |
24 | match_expr | :=expr"="expr |
25 | sendexpr | :=expr"!"expr |
26 | exprs | :=expr|expr","exprs |
27 | guard_expr | :=basic_type|guard_expr_list|guard_expr_tuple|guard_call|"("guard_expr")"|guard_expraddopguard_expr|guard_exprmult_opguard_expr|prefix_opguard_expr |
28 | guard_expr_list | :="[""]"|"["guard_exprguard_expr_tail"]" |
29 | guard_expr_tail | :="|"guard_expr|","guard_exprguard_expr_tail|ε |
30 | guard_expr_tuple | :="{""}"|"{"guard_exprs"}" |
31 | guard_exprs | :=guard_expr|guard_expr","guard_exprs |
32 | guard_call | :="atom""("guard_parameter_list")" |
33 | guard_parameter_list | :=guard_exprs|ε |
34 | bif_test | :="atom""("guard_parameter_list")" |
35 | guard_test | :=bif_test|guard_exprcomp_opguard_expr |
36 | guard_tests | :=guard_test|guard_test","guard_tests |
37 | guard | :="true"|guard_tests |
38 | function_clause | :=clause_headclause_guardclause_body |
39 | clause_head | :="atom""("formalparameter_list")" |
40 | formalparameter_list | :=patterns|ε |
41 | clause_guard | :="when"guard|ε |
42 | clause_body | :="->"exprs |
43 | function | :=function_clause|function_clause";"function |
44 | attribute | :=pattern|"["farity_list"]"|"atom"",""["farity_list"]" |
45 | farity_list | :=farity|farity","farity_list |
46 | farity | :="atom""/""number" |
47 | form | :="-""atom""("attribute")"|function |
非终结符 | 编号 |
---|
add_op | 1 11 27 |
attribute | 44 47 |
basic_type | 5 6 11 27 |
bif_test | 34 35 |
case_expr | 11 17 |
clause_body | 18 21 23 38 42 |
clause_guard | 18 38 41 |
clause_head | 38 39 |
comp_op | 2 35 |
cr_clause | 18 19 |
cr_clauses | 17 19 19 23 |
expr | 11 11 12 13 17 23 24 25 26 |
expr_tail | 12 13 13 |
exprs | 11 14 16 26 26 42 |
farity | 45 46 |
farity_list | 44 45 45 |
form | 47 |
formal_parameter_list | 39 40 |
function | 43 43 47 |
function_call | 11 15 |
function_clause | 38 43 |
guard | 21 37 41 |
guard_call | 27 32 |
guard_expr | 27 27 28 29 31 35 |
guard_expr_list | 27 28 |
guard_expr_tail | 28 29 29 |
guard_expr_tuple | 27 30 |
guard_exprs | 30 31 31 33 |
guard_parameter_list | 32 33 34 |
guard_test | 35 36 |
guard_tests | 36 36 37 |
if_clause | 21 22 |
if_clauses | 20 22 22 |
if_expr | 11 20 |
list | 11 12 |
match_expr | 11 24 |
mult_op | 3 11 27 |
parameter_list | 15 16 |
pattern | 6 7 8 10 18 44 |
pattern_list | 6 7 |
pattern_tail | 7 8 8 |
pattern_tuple | 6 9 |
patterns | 9 10 10 40 |
prefix_op | 4 11 27 |
receive_expr | 11 23 |
send_expr | 11 25 |
tuple | 11 *14 |