| 1 |
open Location |
open Location |
| 2 |
open Ast |
open Ast |
| 3 |
|
|
|
module P = struct |
|
|
|
|
| 4 |
let gram = Grammar.create (Plexer.make ()) |
let gram = Grammar.create (Plexer.make ()) |
| 5 |
|
let prog = Grammar.Entry.create gram "prog" |
| 6 |
let expr = Grammar.Entry.create gram "expression" |
let expr = Grammar.Entry.create gram "expression" |
| 7 |
let pat = Grammar.Entry.create gram "type/pattern expression" |
let pat = Grammar.Entry.create gram "type/pattern expression" |
| 8 |
let regexp = Grammar.Entry.create gram "type/pattern regexp" |
let regexp = Grammar.Entry.create gram "type/pattern regexp" |
| 21 |
| [] -> assert false |
| [] -> assert false |
| 22 |
|
|
| 23 |
EXTEND |
EXTEND |
| 24 |
GLOBAL: expr pat regexp const; |
GLOBAL: prog expr pat regexp const; |
| 25 |
|
|
| 26 |
|
prog: [ |
| 27 |
|
[ l = LIST0 [ e = expr -> mk loc (EvalStatement e) ] SEP ";;"; |
| 28 |
|
"EOF" -> l ] |
| 29 |
|
]; |
| 30 |
|
|
| 31 |
expr: [ |
expr: [ |
| 32 |
"top" RIGHTA |
"top" RIGHTA |
| 177 |
]; |
]; |
| 178 |
END |
END |
| 179 |
|
|
| 180 |
|
let pat = Grammar.Entry.parse pat |
| 181 |
|
let expr = Grammar.Entry.parse expr |
| 182 |
|
let prog = Grammar.Entry.parse prog |
| 183 |
|
|
| 184 |
|
module From_string = struct |
| 185 |
|
let pat s = pat (Stream.of_string s) |
| 186 |
|
let expr s = expr (Stream.of_string s) |
| 187 |
end |
end |
| 188 |
|
|
|
let pat_or_typ s = Grammar.Entry.parse P.pat (Stream.of_string s) |
|
|
|
|
|
let expr s = Grammar.Entry.parse P.expr (Stream.of_string s) |
|