多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 附录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 |