S -> a b
S -> a S b | a b
let simplePath () =
<@
let rec connected() = tok "road" <|> connected() + connected()
in connected()
@>
let alias () =
<@
let rec aliasTo() = tok "field1_rev" + aliasTo() + tok "field1" <|>
tok "field2_rev" + aliasTo() + tok "field2" <|>
...
aliasTo() + aliasTo() <|>
Eps
in aliasTo()
@>
S -> a S a | B
B -> b
let B = function
| 'b'::tl -> Some tl
| _ -> None
let rec S = function
| 'a'::tl ->
match S tl with
| Some ('a'::tl2) -> Some tl2
| _ -> None
| input ->
match B input with
| Some tl -> Some tl
| None -> None
S -> ABCD; A -> a; B -> b; C -> c; D -> d