diff options
Diffstat (limited to 'parsing/egrammar.ml')
| -rw-r--r-- | parsing/egrammar.ml | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/parsing/egrammar.ml b/parsing/egrammar.ml index cec7e44586..33ca1214fc 100644 --- a/parsing/egrammar.ml +++ b/parsing/egrammar.ml @@ -137,7 +137,13 @@ let make_rule univ etyp rule = let make_rule univ etyp rule = let pil = List.map (symbol_of_prod_item univ) rule.gr_production in let (symbs,ntl) = List.split pil in - let f loc env = CGrammar (loc, rule.gr_action, env) in + let f loc env = match rule.gr_action, env with + | AVar p, [p',a] when p=p' -> a + | AApp (AVar f,[AVar a]), [f',v;a',w] when f=f' & a=a' -> + CApp (loc,v,[w,None]) + | AApp (AVar f,[AVar a]), [a',w;f',v] when f=f' & a=a' -> + CApp (loc,v,[w,None]) + | pat,_ -> CGrammar (loc, pat, env) in let act = make_act f ntl in (symbs, act) |
