-
Notifications
You must be signed in to change notification settings - Fork 125
/
trx_ast.ml
69 lines (55 loc) · 1.88 KB
/
trx_ast.ml
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