Skip to content
This repository
tag: v286
Fetching contributors…

Cannot retrieve contributors at this time

file 69 lines (55 sloc) 1.922 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
(*
Copyright © 2011 MLstate

This file is part of OPA.

OPA is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.

OPA is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.

You should have received a copy of the GNU Affero General Public License
along with OPA. If not, see <http://www.gnu.org/licenses/>.
*)
(*
@author Adam Koprowski
**)

(* TODO, This module should at some point be generalized in such
a way that both OPA TRX and Ocaml TRX could use this AST *)

open QmlLoc

type prefix = [ `AND
              | `NOT
              | `NORMAL
              ]

type suffix = [ `QUESTION
              | `STAR
              | `PLUS
              | `NORMAL
              ]

type range = [ `ONE of int
             | `RANGE of int * int
             ]


type 'code expr = 'code expr_node label
 and 'code expr_node =
   | Expr of 'code seq list

 and 'code seq = 'code seq_node label
 and 'code seq_node =
   { seq_items : 'code item list
   ; seq_code : 'code option
   }

 and 'code item = 'code item_node label
 and 'code item_node =
   { item_name : string option
   ; item_prefix : prefix
   ; item_primary : 'code primary
   ; item_suffix : suffix
   }

 and 'code primary = 'code primary_node label
 and 'code primary_node =
   | Parens of 'code expr
   | Literal of string(*literal*) * bool(*is case-sensitive?*)
   | DynamicLiteral of 'code (* literal string containing embedded OPA expressions {...} *)
   | Code of 'code (* arbitrary expression implementing a parser *)
   | Rule of 'code (* reference to another parsing rule *)
   | Class of range list
   | Any
Something went wrong with that request. Please try again.