zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

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.