OCaml parser combinator that compiles to direct recursive descent
5

Configure Feed

Select the types of activity you want to include in your feed.

ppx_combin / src / ir.ml
3.2 kB 93 lines
1type loc = Ppxlib.Location.t 2 3type expr = 4 | Pure of { loc : loc; value : Ppxlib.expression } 5 | Fail of { loc : loc; msg : string } 6 | Satisfy of { loc : loc; pred : Ppxlib.expression; label : string option } 7 | Any of { loc : loc } 8 | Eof of { loc : loc } 9 | Token of { loc : loc; tok : Ppxlib.expression } 10 | Tokens of { loc : loc; toks : Ppxlib.expression } 11 | OneOf of { loc : loc; toks : Ppxlib.expression } 12 | NoneOf of { loc : loc; toks : Ppxlib.expression } 13 | Bind of { loc : loc; p : expr; f : Ppxlib.expression } 14 | Map of { loc : loc; f : Ppxlib.expression; p : expr } 15 | Apply of { loc : loc; pf : expr; px : expr } 16 | SeqLeft of { loc : loc; p : expr; q : expr } 17 | SeqRight of { loc : loc; p : expr; q : expr } 18 | Alt of { loc : loc; p : expr; q : expr } 19 | Attempt of { loc : loc; p : expr } 20 | Cut of { loc : loc } 21 | Lookahead of { loc : loc; p : expr } 22 | NotFollowedBy of { loc : loc; p : expr } 23 | Many of { loc : loc; p : expr } 24 | Some_ of { loc : loc; p : expr } 25 | Optional of { loc : loc; p : expr } 26 | Option of { loc : loc; default : Ppxlib.expression; p : expr } 27 | SepBy of { loc : loc; p : expr; sep : expr } 28 | SepBy1 of { loc : loc; p : expr; sep : expr } 29 | EndBy of { loc : loc; p : expr; sep : expr } 30 | EndBy1 of { loc : loc; p : expr; sep : expr } 31 | ManyTill of { loc : loc; p : expr; end_ : expr } 32 | Count of { loc : loc; n : Ppxlib.expression; p : expr } 33 | Between of { loc : loc; open_ : expr; close : expr; p : expr } 34 | ChainL of { loc : loc; p : expr; op : expr } 35 | ChainL1 of { loc : loc; p : expr; op : expr } 36 | ChainR of { loc : loc; p : expr; op : expr } 37 | ChainR1 of { loc : loc; p : expr; op : expr } 38 | Choice of { loc : loc; ps : expr list; label : string option } 39 | Label of { loc : loc; p : expr; label : string } 40 | Fix of { loc : loc; arity : int; names : string list; body : Ppxlib.expression } 41 | Var of { loc : loc; name : string } 42 43type parser_def = { 44 loc : loc; 45 name : string; 46 expr : expr; 47} 48 49type mutual_def = { 50 loc : loc; 51 names : string list; 52 expr : expr; 53} 54 55let loc_of_expr = function 56 | Pure { loc; _ } -> loc 57 | Fail { loc; _ } -> loc 58 | Satisfy { loc; _ } -> loc 59 | Any { loc } -> loc 60 | Eof { loc } -> loc 61 | Token { loc; _ } -> loc 62 | Tokens { loc; _ } -> loc 63 | OneOf { loc; _ } -> loc 64 | NoneOf { loc; _ } -> loc 65 | Bind { loc; _ } -> loc 66 | Map { loc; _ } -> loc 67 | Apply { loc; _ } -> loc 68 | SeqLeft { loc; _ } -> loc 69 | SeqRight { loc; _ } -> loc 70 | Alt { loc; _ } -> loc 71 | Attempt { loc; _ } -> loc 72 | Cut { loc } -> loc 73 | Lookahead { loc; _ } -> loc 74 | NotFollowedBy { loc; _ } -> loc 75 | Many { loc; _ } -> loc 76 | Some_ { loc; _ } -> loc 77 | Optional { loc; _ } -> loc 78 | Option { loc; _ } -> loc 79 | SepBy { loc; _ } -> loc 80 | SepBy1 { loc; _ } -> loc 81 | EndBy { loc; _ } -> loc 82 | EndBy1 { loc; _ } -> loc 83 | ManyTill { loc; _ } -> loc 84 | Count { loc; _ } -> loc 85 | Between { loc; _ } -> loc 86 | ChainL { loc; _ } -> loc 87 | ChainL1 { loc; _ } -> loc 88 | ChainR { loc; _ } -> loc 89 | ChainR1 { loc; _ } -> loc 90 | Choice { loc; _ } -> loc 91 | Label { loc; _ } -> loc 92 | Fix { loc; _ } -> loc 93 | Var { loc; _ } -> loc