附录A Erlang 语法参考
附录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 |