parser.yrl (3248B)
1 Nonterminals 2 3 assignment 4 atom 5 binary binary_items binary_part 6 byte 7 byte_list byte_items 8 contract 9 document 10 function 11 integer 12 list 13 map map_items map_entry 14 pattern 15 pipe_list 16 range 17 rest 18 tuple 19 type 20 value_items 21 values value. 22 23 Terminals 24 25 atom_part atom_full 26 int 27 '(' ')' 28 '[' ']' 29 '_' 30 '\'' 31 ',' 32 '#' '{' '}' 33 ':=' '=>' 34 'fun(' '->' 35 '|' 36 '..' 37 '::' 38 ':' 39 '...' 40 '<' '>' 41 '*' 42 'when' 43 '='. 44 45 Rootsymbol document. 46 47 document -> values : '$1'. 48 49 values -> value : ['$1']. 50 values -> value values : ['$1'] ++ '$2'. 51 52 value -> '\'' value '\'' : '$2'. 53 value -> assignment : '$1'. 54 value -> atom : {atom, '$1'}. 55 value -> binary : '$1'. 56 value -> byte_list : '$1'. 57 value -> contract : '$1'. 58 value -> function : '$1'. 59 value -> integer : '$1'. 60 value -> list : '$1'. 61 value -> map : '$1'. 62 value -> pattern : '$1'. 63 value -> pipe_list : '$1'. 64 value -> range : '$1'. 65 value -> rest : '$1'. 66 value -> tuple : '$1'. 67 value -> type : '$1'. 68 69 binary -> '<' '<' '>' '>' : {binary, []}. 70 binary -> '<' '<' binary_items '>' '>' : {binary, '$3'}. 71 binary -> '<' '<' value_items '>' '>' : {binary, '$3'}. 72 73 pattern -> '<' value_items '>' : {pattern, '$2'}. 74 75 tuple -> '{' '}' : {tuple, []}. 76 tuple -> '{' value_items '}' : {tuple, '$2'}. 77 78 byte_list -> '#' '{' '}' '#' : {byte_list, []}. 79 byte_list -> '#' '{' byte_items '}' '#' : {byte_list, '$3'}. 80 81 list -> '(' ')' : {list, paren, []}. 82 list -> '(' value_items ')' : {list, paren, '$2'}. 83 list -> '[' ']' : {list, square, []}. 84 list -> '[' value_items ']' : {list, square, '$2'}. 85 86 map -> '#' '{' '}' : {map, []}. 87 map -> '#' '{' map_items '}' : {map, '$3'}. 88 89 map_entry -> value ':=' value : {map_entry, '$1', '$3'}. 90 map_entry -> value '=>' value : {map_entry, '$1', '$3'}. 91 92 function -> 'fun(' ')' : {any_function}. 93 function -> 'fun(' '...' ')' : {inner_any_function}. 94 function -> 'fun(' contract ')' : {function, '$2'}. 95 96 binary_part -> '_' ':' value : {binary_part, {any}, '$3'}. 97 binary_part -> '_' ':' '_' '*' value : {binary_part, {any}, {any}, {size, '$5'}}. 98 99 assignment -> value '=' value : {assignment, '$1', '$3'}. 100 101 byte -> '#' '<' int '>' '(' int ',' int ',' atom ',' '[' atom ',' atom ']' ')' : unwrap('$3'). 102 103 contract -> list '->' value when value_items : {contract, {args, '$1'}, {return, '$3'}, {whens, '$5'}}. 104 contract -> list '->' value : {contract, {args, '$1'}, {return, '$3'}}. 105 contract -> function '->' value : {contract, {args, '$1'}, {return, '$3'}}. 106 107 integer -> int : {int, unwrap('$1')}. 108 109 pipe_list -> value '|' value : {pipe_list, '$1', '$3'}. 110 111 range -> integer '..' integer : {range, '$1', '$3'}. 112 113 rest -> '...' : {rest}. 114 115 atom -> atom_full : unwrap('$1'). 116 atom -> atom_part : [unwrap('$1')]. 117 atom -> '_' : ['_']. 118 atom -> atom integer : '$1' ++ ['$2']. 119 atom -> atom atom : '$1' ++ '$2'. 120 121 type -> atom ':' type : {type, {atom, '$1'}, '$3'}. 122 type -> atom '::' value : {named_type, {atom, '$1'}, '$3'}. 123 type -> atom list : {type_list, '$1', '$2'}. 124 125 binary_items -> binary_part : ['$1']. 126 binary_items -> binary_part ',' binary_items : ['$1'] ++ '$3'. 127 128 byte_items -> byte : ['$1']. 129 byte_items -> byte ',' byte_items : ['$1'] ++ '$3'. 130 131 map_items -> map_entry : ['$1']. 132 map_items -> map_entry ',' map_items : ['$1'] ++ '$3'. 133 134 value_items -> value : ['$1']. 135 value_items -> value ',' value_items : ['$1'] ++ '$3'. 136 137 Erlang code. 138 139 unwrap({_,_,V}) -> V.