An Experimental Ambiguity Detection Tool
Sylvain Schmitz
Laboratoire I3S, Universit´ e de Nice - Sophia Antipolis & CNRS
March 25, 2007
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 1 / 28
An Experimental Ambiguity Detection Tool Sylvain Schmitz - - PowerPoint PPT Presentation
An Experimental Ambiguity Detection Tool Sylvain Schmitz Laboratoire I3S, Universit e de Nice - Sophia Antipolis & CNRS March 25, 2007 Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA07 1 / 28
Laboratoire I3S, Universit´ e de Nice - Sophia Antipolis & CNRS
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 1 / 28
Syntax Issue Standard ML
Milner et al. [1997]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 3 / 28
Syntax Issue Standard ML
SML Compilers Behaviour
◮ MLton ◮ Moscow ML ◮ Poly/ML ◮ SML/NJ
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 5 / 28
Syntax Issue Standard ML
SML Compilers Behaviour
◮ MLton ◮ Moscow ML ◮ Poly/ML ◮ SML/NJ
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 5 / 28
Syntax Issue Standard ML
SML Compilers Behaviour
◮ MLton ◮ Moscow ML ◮ Poly/ML ◮ SML/NJ
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 5 / 28
Syntax Issue Standard ML
SML Compilers Behaviour
◮ MLton ◮ Moscow ML ◮ Poly/ML ◮ SML/NJ
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 5 / 28
Syntax Issue Shift/Reduce Conflict
Partial SML Grammar
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 6 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
pat mrule exp match . . . match pat mrule exp fvalbind
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
pat mrule exp match . . . exp vid sfvb error! sfvb fvalbind
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
pat mrule exp match match . . . exp pat mrule fvalbind
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
| NONE => filterP(r, l) | filterP ([], l) = rev l exp pat mrule match . . . fvalbind sfvalbind exp atpats exp sfvalbind fvalbind
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
| NONE => filterP(r, l) | filterP ([], l) = rev l exp pat mrule match . . . fvalbind sfvalbind exp atpats exp sfvalbind fvalbind
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
| NONE => filterP(r, l) | filterP ([], l) = rev l exp pat mrule match . . . pat exp sfvalbind fvalbind fvalbind exp match error! fvalbind
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
sfvb mrule atpats atpat atpat pat vid vid => = | | ... ... ... ...
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue Shift/Reduce Conflict
Shift/Reduce Conflict
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 8 / 28
Syntax Issue GLR Parsing
Tomita [1986]
◮ checks every possibility ◮ considered fast enough ◮ painless
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 9 / 28
Syntax Issue GLR Parsing
Tomita [1986]
◮ checks every possibility ◮ considered fast enough ◮ painless. . . or is it?
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 9 / 28
Syntax Issue GLR Parsing
◮ painless. . . or is it? ◮ need to consider ambiguity
mrule exp match match mrule exp exp mrule match case a of b => case b of c => c | d=> d pat mrule exp exp match ≡ match
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 9 / 28
Syntax Issue GLR Parsing
◮ need to consider ambiguity
mrule exp match match mrule exp exp mrule match case a of b => case b of c => c | d=> d pat mrule exp exp match ≡ match
◮ select a single tree: disambiguation filters
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 9 / 28
Syntax Issue GLR Parsing
Klint and Visser [1994]
mrule exp match match mrule exp exp mrule match case a of b => case b of c => c | d=> d pat mrule exp exp match ≡ match
◮ prefer and avoid in SDF2 ◮ %dprec in GNU Bison
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 10 / 28
Syntax Issue GLR Parsing
Klint and Visser [1994]
mrule exp match match mrule exp exp mrule match case a of b => case b of c => c | d=> d pat mrule exp exp match ≡ match
◮ prefer and avoid in SDF2 ◮ %dprec in GNU Bison
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 10 / 28
Syntax Issue GLR Parsing
Do we catch all the ambiguities?
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 12 / 28
Syntax Issue GLR Parsing
Do we catch all the ambiguities?
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 12 / 28
Syntax Issue GLR Parsing
Do we catch all the ambiguities?
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 12 / 28
Syntax Issue GLR Parsing
Do we catch all the ambiguities?
◮ warnings in SDF2 and Elkhound, optionally aborts ◮ abort in GNU Bison
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 12 / 28
Syntax Issue GLR Parsing
◮ conflicts in the LALR(1) parser
sml.y: conflicts: 223 shift/reduce, 35 reduce/reduce
◮ ? ◮ Our tool:
89 potential ambiguities with LR(1) precision detected
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 14 / 28
Syntax Issue GLR Parsing
◮ conflicts in the LALR(1) parser
sml.y: conflicts: 223 shift/reduce, 35 reduce/reduce
◮ ? ◮ Our tool:
89 potential ambiguities with LR(1) precision detected
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 14 / 28
Syntax Issue GLR Parsing
◮ conflicts in the LALR(1) parser
sml.y: conflicts: 223 shift/reduce, 35 reduce/reduce
◮ ? ◮ Our tool:
89 potential ambiguities with LR(1) precision detected
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 14 / 28
Syntax Issue GLR Parsing
◮ conflicts in the LALR(1) parser
sml.y: conflicts: 223 shift/reduce, 35 reduce/reduce
◮ ? ◮ Our tool:
89 potential ambiguities with LR(1) precision detected
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 14 / 28
Ambiguity Detection The Algorithm
Results on the SML grammar fragment 2 potential ambiguities with LR(0) precision detected: (match -> mrule . , match -> match . ’|’ mrule ) (match -> match . ’|’ mrule , match -> match ’|’ mrule . )
◮ pairs of items ◮ synchronized to read the same prefix ◮ find pairs that might reach the end of input
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 16 / 28
Ambiguity Detection The Algorithm
Results on the SML grammar fragment 2 potential ambiguities with LR(0) precision detected: (match -> mrule . , match -> match . ’|’ mrule ) (match -> match . ’|’ mrule , match -> match ’|’ mrule . )
◮ pairs of items ◮ synchronized to read the same prefix ◮ find pairs that might reach the end of input
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 16 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
′|′ mrule,
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
′|′ mrule,
′|′ mrule,
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
′|′ mrule,
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ mrule,
′|′ sfvb)
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ sfvb)
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
′|′ mrule,
′|′ sfvb)
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 18 / 28
Ambiguity Detection The Algorithm
Schmitz [2006]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 19 / 28
Ambiguity Detection The Algorithm
Schmitz [2006]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 19 / 28
Ambiguity Detection The Algorithm
Schmitz [2006]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 19 / 28
Ambiguity Detection The Algorithm
Schmitz [2006]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 19 / 28
Ambiguity Detection The Algorithm
Schmitz [2006]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 19 / 28
Ambiguity Detection Experimental Results
LR(0) items SLR(1) items LR(1) items Grammar Bison LR LRR NU LR LRR NU LR LRR NU Pascal 1 243 56 56 5 5 5 1 1 1 Mini C 1 300 16 15 5 5 4 1 1 1 ANSI C 1 377 14 3 14 14 3 1 1 1 ANSI C’ 38 387 43 32 43 43 32 29
258 477 299 271 165 163 135 127 125 104 Small Elsa C++ 58 1379 278 226 66 63 58 64
115 2094 323 308 91 88 77
An ExperimentalAmbiguity Detection Tool LDTA’07 20 / 28
Limitations
Ambiguity Report
◮ grambiguity [Brabrand et al., 2006]
*** horizontal ambiguity at E[plus]: Exp <--> ’+’ Exp ambiguous string: "x+x+x"
◮ ANTLRWorks [Parr, 2007]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 22 / 28
Limitations
Ambiguity Report
◮ grambiguity [Brabrand et al., 2006]
*** horizontal ambiguity at E[plus]: Exp <--> ’+’ Exp ambiguous string: "x+x+x"
◮ ANTLRWorks [Parr, 2007]
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 22 / 28
Limitations
◮ memory requirements: a solution could be a NLALR
◮ dynamic disambiguation: inverse problem, some
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 23 / 28
Conclusion
◮ ambiguity hampers the reliability of grammarware ◮ conservative detection techniques can be improved ◮ prototype tool ◮ many, many open questions left
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 24 / 28
Conclusion
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 25 / 28
Conclusion
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 26 / 28
Conclusion
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 27 / 28
a b a c A B A ≡ B
Sylvain Schmitz (U. Nice Sophia Antipolis) An ExperimentalAmbiguity Detection Tool LDTA’07 28 / 28