input grammar: input.yy
0 $accept → unit "end of file" 1 unit → assignments exp 2 assignments → %empty 3 | assignments assignment 4 assignment → id ":=" exp 5 id → "identifier" 6 @1 → %empty 7 @2 → %empty 8 exp → "incr" exp @1 @2 exp 9 | "(" exp ")" 10 | "identifier" 11 | "number"
0 $accept → • unit "end of file" 1 unit → • assignments exp 2 assignments → • %empty 3 | • assignments assignment $default reduce using rule 2 (assignments) unit go to state 1 assignments go to state 2
0 $accept → unit • "end of file" "end of file" shift, and go to state 3
1 unit → assignments • exp 3 assignments → assignments • assignment 4 assignment → • id ":=" exp 5 id → • "identifier" 8 exp → • "incr" exp @1 @2 exp 9 | • "(" exp ")" 10 | • "identifier" 11 | • "number" "incr" shift, and go to state 4 "identifier" shift, and go to state 5 "number" shift, and go to state 6 "(" shift, and go to state 7 assignment go to state 8 id go to state 9 exp go to state 10
0 $accept → unit "end of file" • $default accept
8 exp → • "incr" exp @1 @2 exp 8 | "incr" • exp @1 @2 exp 9 | • "(" exp ")" 10 | • "identifier" 11 | • "number" "incr" shift, and go to state 4 "identifier" shift, and go to state 11 "number" shift, and go to state 6 "(" shift, and go to state 7 exp go to state 12
5 id → "identifier" • [":="] 10 exp → "identifier" • ["end of file"] "end of file" reduce using rule 10 (exp) $default reduce using rule 5 (id)
11 exp → "number" • $default reduce using rule 11 (exp)
8 exp → • "incr" exp @1 @2 exp 9 | • "(" exp ")" 9 | "(" • exp ")" 10 | • "identifier" 11 | • "number" "incr" shift, and go to state 4 "identifier" shift, and go to state 11 "number" shift, and go to state 6 "(" shift, and go to state 7 exp go to state 13
3 assignments → assignments assignment • $default reduce using rule 3 (assignments)
4 assignment → id • ":=" exp ":=" shift, and go to state 14
1 unit → assignments exp • $default reduce using rule 1 (unit)
10 exp → "identifier" • $default reduce using rule 10 (exp)
6 @1 → • %empty 8 exp → "incr" exp • @1 @2 exp $default reduce using rule 6 (@1) @1 go to state 15
9 exp → "(" exp • ")" ")" shift, and go to state 16
4 assignment → id ":=" • exp 8 exp → • "incr" exp @1 @2 exp 9 | • "(" exp ")" 10 | • "identifier" 11 | • "number" "incr" shift, and go to state 4 "identifier" shift, and go to state 11 "number" shift, and go to state 6 "(" shift, and go to state 7 exp go to state 17
7 @2 → • %empty 8 exp → "incr" exp @1 • @2 exp $default reduce using rule 7 (@2) @2 go to state 18
9 exp → "(" exp ")" • $default reduce using rule 9 (exp)
4 assignment → id ":=" exp • $default reduce using rule 4 (assignment)
8 exp → • "incr" exp @1 @2 exp 8 | "incr" exp @1 @2 • exp 9 | • "(" exp ")" 10 | • "identifier" 11 | • "number" "incr" shift, and go to state 4 "identifier" shift, and go to state 11 "number" shift, and go to state 6 "(" shift, and go to state 7 exp go to state 19
8 exp → "incr" exp @1 @2 exp • $default reduce using rule 8 (exp)
]]) AT_BISON_OPTION_POPDEFS AT_CLEANUP dnl Disable because aborts on some architectures. Not scheduled for 3.8 anyway. dnldnl input grammar: input.yy
dnl dnldnl 0 $accept → YY_PARSE_unit unit "end of file" dnl 1 | YY_PARSE_assignments assignments "end of file" dnl 2 | YY_PARSE_exp exp "end of file" dnl dnl 3 unit → assignments exp dnl dnl 4 assignments → %empty dnl 5 | assignments assignment dnl dnl 6 assignment → id ":=" exp dnl dnl 7 id → "identifier" dnl dnl 8 @1 → %empty dnl dnl 9 @2 → %empty dnl dnl 10 exp → "incr" exp @1 @2 exp dnl 11 | "(" exp ")" dnl 12 | "identifier" dnl 13 | "number" dnl
dnl dnl0 $accept → • YY_PARSE_unit unit "end of file" dnl 1 | • YY_PARSE_assignments assignments "end of file" dnl 2 | • YY_PARSE_exp exp "end of file" dnl dnl YY_PARSE_unit shift, and go to state 1 dnl YY_PARSE_assignments shift, and go to state 2 dnl YY_PARSE_exp shift, and go to state 3 dnl
dnl dnl0 $accept → YY_PARSE_unit • unit "end of file" dnl 3 unit → • assignments exp dnl 4 assignments → • %empty dnl 5 | • assignments assignment dnl dnl $default reduce using rule 4 (assignments) dnl dnl unit go to state 4 dnl assignments go to state 5 dnl
dnl dnl1 $accept → YY_PARSE_assignments • assignments "end of file" dnl 4 assignments → • %empty dnl 5 | • assignments assignment dnl dnl $default reduce using rule 4 (assignments) dnl dnl assignments go to state 6 dnl
dnl dnl2 $accept → YY_PARSE_exp • exp "end of file" dnl 10 exp → • "incr" exp @1 @2 exp dnl 11 | • "(" exp ")" dnl 12 | • "identifier" dnl 13 | • "number" dnl dnl "incr" shift, and go to state 7 dnl "identifier" shift, and go to state 8 dnl "number" shift, and go to state 9 dnl "(" shift, and go to state 10 dnl dnl exp go to state 11 dnl
dnl dnl0 $accept → YY_PARSE_unit unit • "end of file" dnl dnl "end of file" shift, and go to state 12 dnl
dnl dnl3 unit → assignments • exp dnl 5 assignments → assignments • assignment dnl 6 assignment → • id ":=" exp dnl 7 id → • "identifier" dnl 10 exp → • "incr" exp @1 @2 exp dnl 11 | • "(" exp ")" dnl 12 | • "identifier" dnl 13 | • "number" dnl dnl "incr" shift, and go to state 7 dnl "identifier" shift, and go to state 13 dnl "number" shift, and go to state 9 dnl "(" shift, and go to state 10 dnl dnl assignment go to state 14 dnl id go to state 15 dnl exp go to state 16 dnl
dnl dnl1 $accept → YY_PARSE_assignments assignments • "end of file" dnl 5 assignments → assignments • assignment dnl 6 assignment → • id ":=" exp dnl 7 id → • "identifier" dnl dnl "end of file" shift, and go to state 17 dnl "identifier" shift, and go to state 18 dnl dnl assignment go to state 14 dnl id go to state 15 dnl
dnl dnl10 exp → • "incr" exp @1 @2 exp dnl 10 | "incr" • exp @1 @2 exp dnl 11 | • "(" exp ")" dnl 12 | • "identifier" dnl 13 | • "number" dnl dnl "incr" shift, and go to state 7 dnl "identifier" shift, and go to state 8 dnl "number" shift, and go to state 9 dnl "(" shift, and go to state 10 dnl dnl exp go to state 19 dnl
dnl dnl12 exp → "identifier" • dnl dnl $default reduce using rule 12 (exp) dnl
dnl dnl13 exp → "number" • dnl dnl $default reduce using rule 13 (exp) dnl
dnl dnl10 exp → • "incr" exp @1 @2 exp dnl 11 | • "(" exp ")" dnl 11 | "(" • exp ")" dnl 12 | • "identifier" dnl 13 | • "number" dnl dnl "incr" shift, and go to state 7 dnl "identifier" shift, and go to state 8 dnl "number" shift, and go to state 9 dnl "(" shift, and go to state 10 dnl dnl exp go to state 20 dnl
dnl dnl2 $accept → YY_PARSE_exp exp • "end of file" dnl dnl "end of file" shift, and go to state 21 dnl
dnl dnl0 $accept → YY_PARSE_unit unit "end of file" • dnl dnl $default accept dnl
dnl dnl7 id → "identifier" • [":="] dnl 12 exp → "identifier" • ["end of file"] dnl dnl "end of file" reduce using rule 12 (exp) dnl $default reduce using rule 7 (id) dnl
dnl dnl5 assignments → assignments assignment • dnl dnl $default reduce using rule 5 (assignments) dnl
dnl dnl6 assignment → id • ":=" exp dnl dnl ":=" shift, and go to state 22 dnl
dnl dnl3 unit → assignments exp • dnl dnl $default reduce using rule 3 (unit) dnl
dnl dnl1 $accept → YY_PARSE_assignments assignments "end of file" • dnl dnl $default accept dnl
dnl dnl7 id → "identifier" • dnl dnl $default reduce using rule 7 (id) dnl
dnl dnl8 @1 → • %empty dnl 10 exp → "incr" exp • @1 @2 exp dnl dnl $default reduce using rule 8 (@1) dnl dnl @1 go to state 23 dnl
dnl dnl11 exp → "(" exp • ")" dnl dnl ")" shift, and go to state 24 dnl
dnl dnl2 $accept → YY_PARSE_exp exp "end of file" • dnl dnl $default accept dnl
dnl dnl6 assignment → id ":=" • exp dnl 10 exp → • "incr" exp @1 @2 exp dnl 11 | • "(" exp ")" dnl 12 | • "identifier" dnl 13 | • "number" dnl dnl "incr" shift, and go to state 7 dnl "identifier" shift, and go to state 8 dnl "number" shift, and go to state 9 dnl "(" shift, and go to state 10 dnl dnl exp go to state 25 dnl
dnl dnl9 @2 → • %empty dnl 10 exp → "incr" exp @1 • @2 exp dnl dnl $default reduce using rule 9 (@2) dnl dnl @2 go to state 26 dnl
dnl dnl11 exp → "(" exp ")" • dnl dnl $default reduce using rule 11 (exp) dnl
dnl dnl6 assignment → id ":=" exp • dnl dnl $default reduce using rule 6 (assignment) dnl
dnl dnl10 exp → • "incr" exp @1 @2 exp dnl 10 | "incr" exp @1 @2 • exp dnl 11 | • "(" exp ")" dnl 12 | • "identifier" dnl 13 | • "number" dnl dnl "incr" shift, and go to state 7 dnl "identifier" shift, and go to state 8 dnl "number" shift, and go to state 9 dnl "(" shift, and go to state 10 dnl dnl exp go to state 27 dnl
dnl dnl10 exp → "incr" exp @1 @2 exp • dnl dnl $default reduce using rule 10 (exp) dnl
dnl dnl dnl dnl ]]) dnl fi dnl dnl AT_BISON_OPTION_POPDEFS dnl AT_CLEANUP ## ------------------------ ## ## Reports with conflicts. ## ## ------------------------ ## AT_SETUP([Reports with conflicts]) AT_KEYWORDS([cex report]) # We need UTF-8 support for correct screen-width computation of UTF-8 # characters. Skip the test if not available. locale=`locale -a | $EGREP '^en_US\.(UTF-8|utf8)$' | sed 1q` AT_SKIP_IF([[test x = x"$locale"]]) AT_SKIP_IF([[test x"$XSLTPROC" = x]]) AT_BISON_OPTION_PUSHDEFS AT_DATA([input.y], [[%left "+" %% exp : exp "⊕" exp | exp "+" exp | exp "+" exp | "number" | "Ñùṃéℝô" ]]) AT_CHECK([LC_ALL="$locale" bison -fno-caret -o input.cc -rall -Wcex --graph=input.gv --html --xml input.y], [], [], [[input.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr] input.y: warning: 3 reduce/reduce conflicts [-Wconflicts-rr] input.y: warning: shift/reduce conflict on token "⊕" [-Wcounterexamples] Example: exp "+" exp • "⊕" exp Shift derivation exp ↳ 2: exp "+" exp ↳ 1: exp • "⊕" exp Reduce derivation exp ↳ 1: exp "⊕" exp ↳ 2: exp "+" exp • input.y: warning: reduce/reduce conflict on tokens $end, "+", "⊕" [-Wcounterexamples] Example: exp "+" exp • First reduce derivation exp ↳ 2: exp "+" exp • Second reduce derivation exp ↳ 3: exp "+" exp • input.y: warning: shift/reduce conflict on token "⊕" [-Wcounterexamples] Example: exp "+" exp • "⊕" exp Shift derivation exp ↳ 2: exp "+" exp ↳ 1: exp • "⊕" exp Reduce derivation exp ↳ 1: exp "⊕" exp ↳ 3: exp "+" exp • input.y: warning: shift/reduce conflict on token "⊕" [-Wcounterexamples] Example: exp "⊕" exp • "⊕" exp Shift derivation exp ↳ 1: exp "⊕" exp ↳ 1: exp • "⊕" exp Reduce derivation exp ↳ 1: exp "⊕" exp ↳ 1: exp "⊕" exp • input.y: warning: shift/reduce conflict on token "+" [-Wcounterexamples] Example: exp "⊕" exp • "+" exp Shift derivation exp ↳ 1: exp "⊕" exp ↳ 2: exp • "+" exp Reduce derivation exp ↳ 2: exp "+" exp ↳ 1: exp "⊕" exp • input.y: warning: shift/reduce conflict on token "+" [-Wcounterexamples] Example: exp "⊕" exp • "+" exp Shift derivation exp ↳ 1: exp "⊕" exp ↳ 3: exp • "+" exp Reduce derivation exp ↳ 2: exp "+" exp ↳ 1: exp "⊕" exp • input.y:6.3-13: warning: rule useless in parser due to conflicts [-Wother] ]]) # Check the contents of the report. # FIXME: Avoid trailing white spaces. AT_CHECK([sed -e 's/ *$//' input.output], [], [[Rules useless in parser due to conflicts 3 exp: exp "+" exp State 7 conflicts: 1 shift/reduce, 3 reduce/reduce State 8 conflicts: 2 shift/reduce Grammar 0 $accept: exp $end 1 exp: exp "⊕" exp 2 | exp "+" exp 3 | exp "+" exp 4 | "number" 5 | "Ñùṃéℝô" Terminals, with rules where they appear $end (0) 0 error (256) "+" (258) 2 3 "⊕" (259) 1 "number" (260) 4 "Ñùṃéℝô" (261) 5 Nonterminals, with rules where they appear $accept (7) on left: 0 exp (8) on left: 1 2 3 4 5 on right: 0 1 2 3 State 0 0 $accept: • exp $end 1 exp: • exp "⊕" exp 2 | • exp "+" exp 3 | • exp "+" exp 4 | • "number" 5 | • "Ñùṃéℝô" "number" shift, and go to state 1 "Ñùṃéℝô" shift, and go to state 2 exp go to state 3 State 1 4 exp: "number" • $default reduce using rule 4 (exp) State 2 5 exp: "Ñùṃéℝô" • $default reduce using rule 5 (exp) State 3 0 $accept: exp • $end 1 exp: exp • "⊕" exp 2 | exp • "+" exp 3 | exp • "+" exp $end shift, and go to state 4 "+" shift, and go to state 5 "⊕" shift, and go to state 6 State 4 0 $accept: exp $end • $default accept State 5 1 exp: • exp "⊕" exp 2 | • exp "+" exp 2 | exp "+" • exp 3 | • exp "+" exp 3 | exp "+" • exp 4 | • "number" 5 | • "Ñùṃéℝô" "number" shift, and go to state 1 "Ñùṃéℝô" shift, and go to state 2 exp go to state 7 State 6 1 exp: • exp "⊕" exp 1 | exp "⊕" • exp 2 | • exp "+" exp 3 | • exp "+" exp 4 | • "number" 5 | • "Ñùṃéℝô" "number" shift, and go to state 1 "Ñùṃéℝô" shift, and go to state 2 exp go to state 8 State 7 1 exp: exp • "⊕" exp 2 | exp • "+" exp 2 | exp "+" exp • [$end, "+", "⊕"] 3 | exp • "+" exp 3 | exp "+" exp • [$end, "+", "⊕"] "⊕" shift, and go to state 6 $end reduce using rule 2 (exp) $end [reduce using rule 3 (exp)] "+" reduce using rule 2 (exp) "+" [reduce using rule 3 (exp)] "⊕" [reduce using rule 2 (exp)] "⊕" [reduce using rule 3 (exp)] $default reduce using rule 2 (exp) Conflict between rule 2 and token "+" resolved as reduce (%left "+"). shift/reduce conflict on token "⊕": 2 exp: exp "+" exp • 1 exp: exp • "⊕" exp Example: exp "+" exp • "⊕" exp Shift derivation exp ↳ 2: exp "+" exp ↳ 1: exp • "⊕" exp Reduce derivation exp ↳ 1: exp "⊕" exp ↳ 2: exp "+" exp • reduce/reduce conflict on tokens $end, "+", "⊕": 2 exp: exp "+" exp • 3 exp: exp "+" exp • Example: exp "+" exp • First reduce derivation exp ↳ 2: exp "+" exp • Second reduce derivation exp ↳ 3: exp "+" exp • shift/reduce conflict on token "⊕": 3 exp: exp "+" exp • 1 exp: exp • "⊕" exp Example: exp "+" exp • "⊕" exp Shift derivation exp ↳ 2: exp "+" exp ↳ 1: exp • "⊕" exp Reduce derivation exp ↳ 1: exp "⊕" exp ↳ 3: exp "+" exp • State 8 1 exp: exp • "⊕" exp 1 | exp "⊕" exp • [$end, "+", "⊕"] 2 | exp • "+" exp 3 | exp • "+" exp "+" shift, and go to state 5 "⊕" shift, and go to state 6 "+" [reduce using rule 1 (exp)] "⊕" [reduce using rule 1 (exp)] $default reduce using rule 1 (exp) shift/reduce conflict on token "⊕": 1 exp: exp "⊕" exp • 1 exp: exp • "⊕" exp Example: exp "⊕" exp • "⊕" exp Shift derivation exp ↳ 1: exp "⊕" exp ↳ 1: exp • "⊕" exp Reduce derivation exp ↳ 1: exp "⊕" exp ↳ 1: exp "⊕" exp • shift/reduce conflict on token "+": 1 exp: exp "⊕" exp • 2 exp: exp • "+" exp Example: exp "⊕" exp • "+" exp Shift derivation exp ↳ 1: exp "⊕" exp ↳ 2: exp • "+" exp Reduce derivation exp ↳ 2: exp "+" exp ↳ 1: exp "⊕" exp • shift/reduce conflict on token "+": 1 exp: exp "⊕" exp • 3 exp: exp • "+" exp Example: exp "⊕" exp • "+" exp Shift derivation exp ↳ 1: exp "⊕" exp ↳ 3: exp • "+" exp Reduce derivation exp ↳ 2: exp "+" exp ↳ 1: exp "⊕" exp • ]]) AT_CHECK([cat input.gv], [], [[// Generated by GNU Bison ]AT_PACKAGE_VERSION[. // Report bugs toinput grammar: input.y
3 exp → exp "+" exp
State 7 conflicts: 1 shift/reduce, 3 reduce/reduce State 8 conflicts: 2 shift/reduce
0 $accept → exp $end 1 exp → exp "⊕" exp 2 | exp "+" exp 3 | exp "+" exp 4 | "number" 5 | "Ñùṃéℝô"
0 $accept → • exp $end 1 exp → • exp "⊕" exp 2 | • exp "+" exp 3 | • exp "+" exp 4 | • "number" 5 | • "Ñùṃéℝô" "number" shift, and go to state 1 "Ñùṃéℝô" shift, and go to state 2 exp go to state 3
4 exp → "number" • $default reduce using rule 4 (exp)
5 exp → "Ñùṃéℝô" • $default reduce using rule 5 (exp)
0 $accept → exp • $end 1 exp → exp • "⊕" exp 2 | exp • "+" exp 3 | exp • "+" exp $end shift, and go to state 4 "+" shift, and go to state 5 "⊕" shift, and go to state 6
0 $accept → exp $end • $default accept
1 exp → • exp "⊕" exp 2 | • exp "+" exp 2 | exp "+" • exp 3 | • exp "+" exp 3 | exp "+" • exp 4 | • "number" 5 | • "Ñùṃéℝô" "number" shift, and go to state 1 "Ñùṃéℝô" shift, and go to state 2 exp go to state 7
1 exp → • exp "⊕" exp 1 | exp "⊕" • exp 2 | • exp "+" exp 3 | • exp "+" exp 4 | • "number" 5 | • "Ñùṃéℝô" "number" shift, and go to state 1 "Ñùṃéℝô" shift, and go to state 2 exp go to state 8
1 exp → exp • "⊕" exp 2 | exp • "+" exp 2 | exp "+" exp • [$end, "+", "⊕"] 3 | exp • "+" exp 3 | exp "+" exp • [$end, "+", "⊕"] "⊕" shift, and go to state 6 $end reduce using rule 2 (exp) $end [reduce using rule 3 (exp)] "+" reduce using rule 2 (exp) "+" [reduce using rule 3 (exp)] "⊕" [reduce using rule 2 (exp)] "⊕" [reduce using rule 3 (exp)] $default reduce using rule 2 (exp) Conflict between rule 2 and token "+" resolved as reduce (%left "+").
1 exp → exp • "⊕" exp 1 | exp "⊕" exp • [$end, "+", "⊕"] 2 | exp • "+" exp 3 | exp • "+" exp "+" shift, and go to state 5 "⊕" shift, and go to state 6 "+" [reduce using rule 1 (exp)] "⊕" [reduce using rule 1 (exp)] $default reduce using rule 1 (exp)
]]) AT_BISON_OPTION_POPDEFS AT_CLEANUP