# Bison Reports. -*- Autotest -*- # Copyright (C) 2018-2022 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . AT_BANNER([[Test reports.]]) # AT_CHECK_HTML(FILE, EXPECTED-CONTENT) # ------------------------------------- # Old versions of xsltproc emit 'content="text/html; charset=UTF-8"' # instead of 'content="text/html;charset=UTF-8"'. # m4_define([AT_CHECK_HTML], [AT_KEYWORDS([html]) AT_CHECK([sed -e 's|content="text/html; charset=UTF-8"|content="text/html;charset=UTF-8"|g' $1], [], [$2])]) ## --------- ## ## Reports. ## ## --------- ## AT_SETUP([Reports]) AT_KEYWORDS([report]) AT_BISON_OPTION_PUSHDEFS AT_DATA([input.yy], [[%token END 0 "end of file" ASSIGN ":=" INCR "incr" ; %token IDENTIFIER "identifier" %type id %token NUMBER "number" %type exp %% %start unit; unit: assignments exp { driver.result = $2; }; assignments: %empty {} | assignments assignment {}; assignment: id ":=" exp { driver.variables[$id] = $exp; }; id: "identifier"; exp: "incr" exp { $$ = 1; } { $$ = 10; } exp { $$ = $2 + $3 + $4 + $5; } | "(" exp ")" { std::swap ($$, $2); } | "identifier" { $$ = driver.variables[$1]; } | "number" { std::swap ($$, $1); }; ]]) AT_SKIP_IF([[test x"$XSLTPROC" = x]]) AT_BISON_CHECK([-o input.cc -v --graph=input.gv --html --xml input.yy]) # Check the contents of the report. AT_CHECK([cat input.output], [], [[Grammar 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" Terminals, with rules where they appear "end of file" (0) 0 error (256) ":=" (258) 4 "incr" (259) 8 "identifier" (260) 5 10 "number" (261) 11 "(" (262) 9 ")" (263) 9 Nonterminals, with rules where they appear $accept (9) on left: 0 unit (10) on left: 1 on right: 0 assignments (11) on left: 2 3 on right: 1 3 assignment (12) on left: 4 on right: 3 id (13) on left: 5 on right: 4 exp (14) on left: 8 9 10 11 on right: 1 4 8 9 @1 (15) on left: 6 on right: 8 @2 (16) on left: 7 on right: 8 State 0 0 $accept: . unit "end of file" $default reduce using rule 2 (assignments) unit go to state 1 assignments go to state 2 State 1 0 $accept: unit . "end of file" "end of file" shift, and go to state 3 State 2 1 unit: assignments . exp 3 assignments: assignments . assignment "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 State 3 0 $accept: unit "end of file" . $default accept State 4 8 exp: "incr" . exp @1 @2 exp "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 State 5 5 id: "identifier" . 10 exp: "identifier" . "end of file" reduce using rule 10 (exp) $default reduce using rule 5 (id) State 6 11 exp: "number" . $default reduce using rule 11 (exp) State 7 9 exp: "(" . exp ")" "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 State 8 3 assignments: assignments assignment . $default reduce using rule 3 (assignments) State 9 4 assignment: id . ":=" exp ":=" shift, and go to state 14 State 10 1 unit: assignments exp . $default reduce using rule 1 (unit) State 11 10 exp: "identifier" . $default reduce using rule 10 (exp) State 12 8 exp: "incr" exp . @1 @2 exp $default reduce using rule 6 (@1) @1 go to state 15 State 13 9 exp: "(" exp . ")" ")" shift, and go to state 16 State 14 4 assignment: id ":=" . exp "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 State 15 8 exp: "incr" exp @1 . @2 exp $default reduce using rule 7 (@2) @2 go to state 18 State 16 9 exp: "(" exp ")" . $default reduce using rule 9 (exp) State 17 4 assignment: id ":=" exp . $default reduce using rule 4 (assignment) State 18 8 exp: "incr" exp @1 @2 . exp "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 State 19 8 exp: "incr" exp @1 @2 exp . $default reduce using rule 8 (exp) ]]) # Now generate verbose reports. AT_SKIP_IF([[test x"$XSLTPROC" = x]]) AT_BISON_CHECK([-o input.cc -rall --graph=input.gv --html --xml input.yy]) # Check the contents of the report. AT_CHECK([cat input.output], [], [[Grammar 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" Terminals, with rules where they appear "end of file" (0) 0 error (256) ":=" (258) 4 "incr" (259) 8 "identifier" (260) 5 10 "number" (261) 11 "(" (262) 9 ")" (263) 9 Nonterminals, with rules where they appear $accept (9) on left: 0 unit (10) on left: 1 on right: 0 assignments (11) on left: 2 3 on right: 1 3 assignment (12) on left: 4 on right: 3 id (13) on left: 5 on right: 4 exp (14) on left: 8 9 10 11 on right: 1 4 8 9 @1 (15) on left: 6 on right: 8 @2 (16) on left: 7 on right: 8 State 0 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 State 1 0 $accept: unit . "end of file" "end of file" shift, and go to state 3 State 2 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 State 3 0 $accept: unit "end of file" . $default accept State 4 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 State 5 5 id: "identifier" . [":="] 10 exp: "identifier" . ["end of file"] "end of file" reduce using rule 10 (exp) $default reduce using rule 5 (id) State 6 11 exp: "number" . $default reduce using rule 11 (exp) State 7 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 State 8 3 assignments: assignments assignment . $default reduce using rule 3 (assignments) State 9 4 assignment: id . ":=" exp ":=" shift, and go to state 14 State 10 1 unit: assignments exp . $default reduce using rule 1 (unit) State 11 10 exp: "identifier" . $default reduce using rule 10 (exp) State 12 6 @1: %empty . 8 exp: "incr" exp . @1 @2 exp $default reduce using rule 6 (@1) @1 go to state 15 State 13 9 exp: "(" exp . ")" ")" shift, and go to state 16 State 14 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 State 15 7 @2: %empty . 8 exp: "incr" exp @1 . @2 exp $default reduce using rule 7 (@2) @2 go to state 18 State 16 9 exp: "(" exp ")" . $default reduce using rule 9 (exp) State 17 4 assignment: id ":=" exp . $default reduce using rule 4 (assignment) State 18 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 State 19 8 exp: "incr" exp @1 @2 exp . $default reduce using rule 8 (exp) ]]) AT_CHECK([cat input.gv], [], [[// Generated by GNU Bison ]AT_PACKAGE_VERSION[. // Report bugs to . // Home page: . digraph "input.yy" { node [fontname = courier, shape = box, colorscheme = paired6] edge [fontname = courier] 0 [label="State 0\n\l 0 $accept: • unit \"end of file\"\l 1 unit: • assignments exp\l 2 assignments: • %empty\l 3 | • assignments assignment\l"] 0 -> 1 [style=dashed label="unit"] 0 -> 2 [style=dashed label="assignments"] 0 -> "0R2" [style=solid] "0R2" [label="R2", fillcolor=3, shape=diamond, style=filled] 1 [label="State 1\n\l 0 $accept: unit • \"end of file\"\l"] 1 -> 3 [style=solid label="\"end of file\""] 2 [label="State 2\n\l 1 unit: assignments • exp\l 3 assignments: assignments • assignment\l 4 assignment: • id \":=\" exp\l 5 id: • \"identifier\"\l 8 exp: • \"incr\" exp @1 @2 exp\l 9 | • \"(\" exp \")\"\l 10 | • \"identifier\"\l 11 | • \"number\"\l"] 2 -> 4 [style=solid label="\"incr\""] 2 -> 5 [style=solid label="\"identifier\""] 2 -> 6 [style=solid label="\"number\""] 2 -> 7 [style=solid label="\"(\""] 2 -> 8 [style=dashed label="assignment"] 2 -> 9 [style=dashed label="id"] 2 -> 10 [style=dashed label="exp"] 3 [label="State 3\n\l 0 $accept: unit \"end of file\" •\l"] 3 -> "3R0" [style=solid] "3R0" [label="Acc", fillcolor=1, shape=diamond, style=filled] 4 [label="State 4\n\l 8 exp: • \"incr\" exp @1 @2 exp\l 8 | \"incr\" • exp @1 @2 exp\l 9 | • \"(\" exp \")\"\l 10 | • \"identifier\"\l 11 | • \"number\"\l"] 4 -> 4 [style=solid label="\"incr\""] 4 -> 11 [style=solid label="\"identifier\""] 4 -> 6 [style=solid label="\"number\""] 4 -> 7 [style=solid label="\"(\""] 4 -> 12 [style=dashed label="exp"] 5 [label="State 5\n\l 5 id: \"identifier\" • [\":=\"]\l 10 exp: \"identifier\" • [\"end of file\"]\l"] 5 -> "5R5" [style=solid] "5R5" [label="R5", fillcolor=3, shape=diamond, style=filled] 5 -> "5R10" [label="[\"end of file\"]", style=solid] "5R10" [label="R10", fillcolor=3, shape=diamond, style=filled] 6 [label="State 6\n\l 11 exp: \"number\" •\l"] 6 -> "6R11" [style=solid] "6R11" [label="R11", fillcolor=3, shape=diamond, style=filled] 7 [label="State 7\n\l 8 exp: • \"incr\" exp @1 @2 exp\l 9 | • \"(\" exp \")\"\l 9 | \"(\" • exp \")\"\l 10 | • \"identifier\"\l 11 | • \"number\"\l"] 7 -> 4 [style=solid label="\"incr\""] 7 -> 11 [style=solid label="\"identifier\""] 7 -> 6 [style=solid label="\"number\""] 7 -> 7 [style=solid label="\"(\""] 7 -> 13 [style=dashed label="exp"] 8 [label="State 8\n\l 3 assignments: assignments assignment •\l"] 8 -> "8R3" [style=solid] "8R3" [label="R3", fillcolor=3, shape=diamond, style=filled] 9 [label="State 9\n\l 4 assignment: id • \":=\" exp\l"] 9 -> 14 [style=solid label="\":=\""] 10 [label="State 10\n\l 1 unit: assignments exp •\l"] 10 -> "10R1" [style=solid] "10R1" [label="R1", fillcolor=3, shape=diamond, style=filled] 11 [label="State 11\n\l 10 exp: \"identifier\" •\l"] 11 -> "11R10" [style=solid] "11R10" [label="R10", fillcolor=3, shape=diamond, style=filled] 12 [label="State 12\n\l 6 @1: • %empty\l 8 exp: \"incr\" exp • @1 @2 exp\l"] 12 -> 15 [style=dashed label="@1"] 12 -> "12R6" [style=solid] "12R6" [label="R6", fillcolor=3, shape=diamond, style=filled] 13 [label="State 13\n\l 9 exp: \"(\" exp • \")\"\l"] 13 -> 16 [style=solid label="\")\""] 14 [label="State 14\n\l 4 assignment: id \":=\" • exp\l 8 exp: • \"incr\" exp @1 @2 exp\l 9 | • \"(\" exp \")\"\l 10 | • \"identifier\"\l 11 | • \"number\"\l"] 14 -> 4 [style=solid label="\"incr\""] 14 -> 11 [style=solid label="\"identifier\""] 14 -> 6 [style=solid label="\"number\""] 14 -> 7 [style=solid label="\"(\""] 14 -> 17 [style=dashed label="exp"] 15 [label="State 15\n\l 7 @2: • %empty\l 8 exp: \"incr\" exp @1 • @2 exp\l"] 15 -> 18 [style=dashed label="@2"] 15 -> "15R7" [style=solid] "15R7" [label="R7", fillcolor=3, shape=diamond, style=filled] 16 [label="State 16\n\l 9 exp: \"(\" exp \")\" •\l"] 16 -> "16R9" [style=solid] "16R9" [label="R9", fillcolor=3, shape=diamond, style=filled] 17 [label="State 17\n\l 4 assignment: id \":=\" exp •\l"] 17 -> "17R4" [style=solid] "17R4" [label="R4", fillcolor=3, shape=diamond, style=filled] 18 [label="State 18\n\l 8 exp: • \"incr\" exp @1 @2 exp\l 8 | \"incr\" exp @1 @2 • exp\l 9 | • \"(\" exp \")\"\l 10 | • \"identifier\"\l 11 | • \"number\"\l"] 18 -> 4 [style=solid label="\"incr\""] 18 -> 11 [style=solid label="\"identifier\""] 18 -> 6 [style=solid label="\"number\""] 18 -> 7 [style=solid label="\"(\""] 18 -> 19 [style=dashed label="exp"] 19 [label="State 19\n\l 8 exp: \"incr\" exp @1 @2 exp •\l"] 19 -> "19R8" [style=solid] "19R8" [label="R8", fillcolor=3, shape=diamond, style=filled] } ]]) AT_CHECK([[cat input.xml]], [], [[ input.yy $accept unit "end of file" unit assignments exp assignments assignments assignments assignment assignment id ":=" exp id "identifier" @1 @2 exp "incr" exp @1 @2 exp exp "(" exp ")" exp "identifier" exp "number" ":=" "end of file" ]]) # Check HTML output. AT_CHECK_HTML([input.html], [[ input.yy - GNU Bison XML Automaton Report

GNU Bison XML Automaton Report

input grammar: input.yy

Table of Contents

Reductions

Nonterminals useless in grammar

Terminals unused in grammar

Rules useless in grammar

Conflicts

Grammar

0 $acceptunit "end of file" 1 unitassignments exp 2 assignments → %empty 3 | assignments assignment 4 assignmentid ":=" exp 5 id"identifier" 6 @1 → %empty 7 @2 → %empty 8 exp"incr" exp @1 @2 exp 9 | "(" exp ")" 10 | "identifier" 11 | "number"

Terminals, with rules where they appear

  • "end of file" (0) 0
  • error (256)
  • ":=" (258) 4
  • "incr" (259) 8
  • "identifier" <std::string> (260) 5 10
  • "number" <int> (261) 11
  • "(" (262) 9
  • ")" (263) 9

Nonterminals, with rules where they appear

  • $accept (9)
    • on left: 0
  • unit (10)
    • on left: 1
    • on right: 0
  • assignments (11)
    • on left: 2 3
    • on right: 1 3
  • assignment (12)
    • on left: 4
    • on right: 3
  • id <std::string> (13)
    • on left: 5
    • on right: 4
  • exp <int> (14)
  • @1 <int> (15)
    • on left: 6
    • on right: 8
  • @2 <int> (16)
    • on left: 7
    • on right: 8

Automaton

State 0

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

State 1

0 $acceptunit "end of file" "end of file" shift, and go to state 3

State 2

1 unitassignments exp 3 assignmentsassignments 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

State 3

0 $acceptunit "end of file" $default accept

State 4

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

State 5

5 id"identifier" [":="] 10 exp"identifier" ["end of file"] "end of file" reduce using rule 10 (exp) $default reduce using rule 5 (id)

State 6

11 exp"number" $default reduce using rule 11 (exp)

State 7

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

State 8

3 assignmentsassignments assignment $default reduce using rule 3 (assignments)

State 9

4 assignmentid ":=" exp ":=" shift, and go to state 14

State 10

1 unitassignments exp $default reduce using rule 1 (unit)

State 11

10 exp"identifier" $default reduce using rule 10 (exp)

State 12

6 @1 %empty 8 exp"incr" exp @1 @2 exp $default reduce using rule 6 (@1) @1 go to state 15

State 13

9 exp"(" exp ")" ")" shift, and go to state 16

State 14

4 assignmentid ":=" 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

State 15

7 @2 %empty 8 exp"incr" exp @1 @2 exp $default reduce using rule 7 (@2) @2 go to state 18

State 16

9 exp"(" exp ")" $default reduce using rule 9 (exp)

State 17

4 assignmentid ":=" exp $default reduce using rule 4 (assignment)

State 18

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

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. dnl dnl dnl ## -------------------- ## dnl ## Multistart reports. ## dnl ## -------------------- ## dnl dnl AT_SETUP([Multistart reports]) dnl dnl AT_KEYWORDS([multistart report]) dnl dnl AT_BISON_OPTION_PUSHDEFS dnl AT_DATA([input.yy], dnl [[%token dnl END 0 "end of file" dnl ASSIGN ":=" dnl INCR "incr" dnl ; dnl dnl %token IDENTIFIER "identifier" dnl %type id dnl %token NUMBER "number" dnl %type exp dnl dnl %% dnl %start unit assignments exp; dnl unit: assignments exp { driver.result = $2; }; dnl dnl assignments: dnl %empty {} dnl | assignments assignment {}; dnl dnl assignment: dnl id ":=" exp { driver.variables[$id] = $exp; }; dnl dnl id: dnl "identifier"; dnl dnl exp: dnl "incr" exp { $$ = 1; } { $$ = 10; } exp { $$ = $2 + $3 + $4 + $5; } dnl | "(" exp ")" { std::swap ($$, $2); } dnl | "identifier" { $$ = driver.variables[$1]; } dnl | "number" { std::swap ($$, $1); }; dnl ]]) dnl dnl AT_BISON_CHECK([-o input.cc -rall --graph=input.gv --xml input.yy]) dnl dnl # Check the contents of the report. dnl AT_CHECK([cat input.output], [], dnl [[Grammar dnl dnl 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 dnl Terminals, with rules where they appear dnl dnl "end of file" (0) 0 1 2 dnl error (256) dnl ":=" (258) 6 dnl "incr" (259) 10 dnl "identifier" (260) 7 12 dnl "number" (261) 13 dnl YY_PARSE_unit (262) 0 dnl YY_PARSE_assignments (263) 1 dnl YY_PARSE_exp (264) 2 dnl "(" (265) 11 dnl ")" (266) 11 dnl dnl dnl Nonterminals, with rules where they appear dnl dnl $accept (12) dnl on left: 0 1 2 dnl unit (13) dnl on left: 3 dnl on right: 0 dnl assignments (14) dnl on left: 4 5 dnl on right: 1 3 5 dnl assignment (15) dnl on left: 6 dnl on right: 5 dnl id (16) dnl on left: 7 dnl on right: 6 dnl exp (17) dnl on left: 10 11 12 13 dnl on right: 2 3 6 10 11 dnl @1 (18) dnl on left: 8 dnl on right: 10 dnl @2 (19) dnl on left: 9 dnl on right: 10 dnl dnl dnl State 0 dnl dnl 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 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 dnl State 1 dnl dnl 0 $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 dnl State 2 dnl dnl 1 $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 dnl State 3 dnl dnl 2 $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 dnl State 4 dnl dnl 0 $accept: YY_PARSE_unit unit . "end of file" dnl dnl "end of file" shift, and go to state 12 dnl dnl dnl State 5 dnl dnl 3 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 dnl State 6 dnl dnl 1 $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 dnl State 7 dnl dnl 10 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 dnl State 8 dnl dnl 12 exp: "identifier" . dnl dnl $default reduce using rule 12 (exp) dnl dnl dnl State 9 dnl dnl 13 exp: "number" . dnl dnl $default reduce using rule 13 (exp) dnl dnl dnl State 10 dnl dnl 10 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 dnl State 11 dnl dnl 2 $accept: YY_PARSE_exp exp . "end of file" dnl dnl "end of file" shift, and go to state 21 dnl dnl dnl State 12 dnl dnl 0 $accept: YY_PARSE_unit unit "end of file" . dnl dnl $default accept dnl dnl dnl State 13 dnl dnl 7 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 dnl State 14 dnl dnl 5 assignments: assignments assignment . dnl dnl $default reduce using rule 5 (assignments) dnl dnl dnl State 15 dnl dnl 6 assignment: id . ":=" exp dnl dnl ":=" shift, and go to state 22 dnl dnl dnl State 16 dnl dnl 3 unit: assignments exp . dnl dnl $default reduce using rule 3 (unit) dnl dnl dnl State 17 dnl dnl 1 $accept: YY_PARSE_assignments assignments "end of file" . dnl dnl $default accept dnl dnl dnl State 18 dnl dnl 7 id: "identifier" . dnl dnl $default reduce using rule 7 (id) dnl dnl dnl State 19 dnl dnl 8 @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 dnl State 20 dnl dnl 11 exp: "(" exp . ")" dnl dnl ")" shift, and go to state 24 dnl dnl dnl State 21 dnl dnl 2 $accept: YY_PARSE_exp exp "end of file" . dnl dnl $default accept dnl dnl dnl State 22 dnl dnl 6 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 dnl State 23 dnl dnl 9 @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 dnl State 24 dnl dnl 11 exp: "(" exp ")" . dnl dnl $default reduce using rule 11 (exp) dnl dnl dnl State 25 dnl dnl 6 assignment: id ":=" exp . dnl dnl $default reduce using rule 6 (assignment) dnl dnl dnl State 26 dnl dnl 10 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 dnl State 27 dnl dnl 10 exp: "incr" exp @1 @2 exp . dnl dnl $default reduce using rule 10 (exp) dnl ]]) dnl dnl dnl dnl AT_CHECK([cat input.gv], [], dnl [[// Generated by GNU Bison ]AT_PACKAGE_VERSION[. dnl // Report bugs to . dnl // Home page: . dnl dnl digraph "input.yy" dnl { dnl node [fontname = courier, shape = box, colorscheme = paired6] dnl edge [fontname = courier] dnl dnl 0 [label="State 0\n\l 0 $accept: • YY_PARSE_unit unit \"end of file\"\l 1 | • YY_PARSE_assignments assignments \"end of file\"\l 2 | • YY_PARSE_exp exp \"end of file\"\l"] dnl 0 -> 1 [style=solid label="YY_PARSE_unit"] dnl 0 -> 2 [style=solid label="YY_PARSE_assignments"] dnl 0 -> 3 [style=solid label="YY_PARSE_exp"] dnl 1 [label="State 1\n\l 0 $accept: YY_PARSE_unit • unit \"end of file\"\l 3 unit: • assignments exp\l 4 assignments: • %empty\l 5 | • assignments assignment\l"] dnl 1 -> 4 [style=dashed label="unit"] dnl 1 -> 5 [style=dashed label="assignments"] dnl 1 -> "1R4" [style=solid] dnl "1R4" [label="R4", fillcolor=3, shape=diamond, style=filled] dnl 2 [label="State 2\n\l 1 $accept: YY_PARSE_assignments • assignments \"end of file\"\l 4 assignments: • %empty\l 5 | • assignments assignment\l"] dnl 2 -> 6 [style=dashed label="assignments"] dnl 2 -> "2R4" [style=solid] dnl "2R4" [label="R4", fillcolor=3, shape=diamond, style=filled] dnl 3 [label="State 3\n\l 2 $accept: YY_PARSE_exp • exp \"end of file\"\l 10 exp: • \"incr\" exp @1 @2 exp\l 11 | • \"(\" exp \")\"\l 12 | • \"identifier\"\l 13 | • \"number\"\l"] dnl 3 -> 7 [style=solid label="\"incr\""] dnl 3 -> 8 [style=solid label="\"identifier\""] dnl 3 -> 9 [style=solid label="\"number\""] dnl 3 -> 10 [style=solid label="\"(\""] dnl 3 -> 11 [style=dashed label="exp"] dnl 4 [label="State 4\n\l 0 $accept: YY_PARSE_unit unit • \"end of file\"\l"] dnl 4 -> 12 [style=solid label="\"end of file\""] dnl 5 [label="State 5\n\l 3 unit: assignments • exp\l 5 assignments: assignments • assignment\l 6 assignment: • id \":=\" exp\l 7 id: • \"identifier\"\l 10 exp: • \"incr\" exp @1 @2 exp\l 11 | • \"(\" exp \")\"\l 12 | • \"identifier\"\l 13 | • \"number\"\l"] dnl 5 -> 7 [style=solid label="\"incr\""] dnl 5 -> 13 [style=solid label="\"identifier\""] dnl 5 -> 9 [style=solid label="\"number\""] dnl 5 -> 10 [style=solid label="\"(\""] dnl 5 -> 14 [style=dashed label="assignment"] dnl 5 -> 15 [style=dashed label="id"] dnl 5 -> 16 [style=dashed label="exp"] dnl 6 [label="State 6\n\l 1 $accept: YY_PARSE_assignments assignments • \"end of file\"\l 5 assignments: assignments • assignment\l 6 assignment: • id \":=\" exp\l 7 id: • \"identifier\"\l"] dnl 6 -> 17 [style=solid label="\"end of file\""] dnl 6 -> 18 [style=solid label="\"identifier\""] dnl 6 -> 14 [style=dashed label="assignment"] dnl 6 -> 15 [style=dashed label="id"] dnl 7 [label="State 7\n\l 10 exp: • \"incr\" exp @1 @2 exp\l 10 | \"incr\" • exp @1 @2 exp\l 11 | • \"(\" exp \")\"\l 12 | • \"identifier\"\l 13 | • \"number\"\l"] dnl 7 -> 7 [style=solid label="\"incr\""] dnl 7 -> 8 [style=solid label="\"identifier\""] dnl 7 -> 9 [style=solid label="\"number\""] dnl 7 -> 10 [style=solid label="\"(\""] dnl 7 -> 19 [style=dashed label="exp"] dnl 8 [label="State 8\n\l 12 exp: \"identifier\" •\l"] dnl 8 -> "8R12" [style=solid] dnl "8R12" [label="R12", fillcolor=3, shape=diamond, style=filled] dnl 9 [label="State 9\n\l 13 exp: \"number\" •\l"] dnl 9 -> "9R13" [style=solid] dnl "9R13" [label="R13", fillcolor=3, shape=diamond, style=filled] dnl 10 [label="State 10\n\l 10 exp: • \"incr\" exp @1 @2 exp\l 11 | • \"(\" exp \")\"\l 11 | \"(\" • exp \")\"\l 12 | • \"identifier\"\l 13 | • \"number\"\l"] dnl 10 -> 7 [style=solid label="\"incr\""] dnl 10 -> 8 [style=solid label="\"identifier\""] dnl 10 -> 9 [style=solid label="\"number\""] dnl 10 -> 10 [style=solid label="\"(\""] dnl 10 -> 20 [style=dashed label="exp"] dnl 11 [label="State 11\n\l 2 $accept: YY_PARSE_exp exp • \"end of file\"\l"] dnl 11 -> 21 [style=solid label="\"end of file\""] dnl 12 [label="State 12\n\l 0 $accept: YY_PARSE_unit unit \"end of file\" •\l"] dnl 12 -> "12R0" [style=solid] dnl "12R0" [label="Acc", fillcolor=1, shape=diamond, style=filled] dnl 13 [label="State 13\n\l 7 id: \"identifier\" • [\":=\"]\l 12 exp: \"identifier\" • [\"end of file\"]\l"] dnl 13 -> "13R7" [style=solid] dnl "13R7" [label="R7", fillcolor=3, shape=diamond, style=filled] dnl 13 -> "13R12" [label="[\"end of file\"]", style=solid] dnl "13R12" [label="R12", fillcolor=3, shape=diamond, style=filled] dnl 14 [label="State 14\n\l 5 assignments: assignments assignment •\l"] dnl 14 -> "14R5" [style=solid] dnl "14R5" [label="R5", fillcolor=3, shape=diamond, style=filled] dnl 15 [label="State 15\n\l 6 assignment: id • \":=\" exp\l"] dnl 15 -> 22 [style=solid label="\":=\""] dnl 16 [label="State 16\n\l 3 unit: assignments exp •\l"] dnl 16 -> "16R3" [style=solid] dnl "16R3" [label="R3", fillcolor=3, shape=diamond, style=filled] dnl 17 [label="State 17\n\l 1 $accept: YY_PARSE_assignments assignments \"end of file\" •\l"] dnl 17 -> "17R1" [style=solid] dnl "17R1" [label="Acc", fillcolor=1, shape=diamond, style=filled] dnl 18 [label="State 18\n\l 7 id: \"identifier\" •\l"] dnl 18 -> "18R7" [style=solid] dnl "18R7" [label="R7", fillcolor=3, shape=diamond, style=filled] dnl 19 [label="State 19\n\l 8 @1: • %empty\l 10 exp: \"incr\" exp • @1 @2 exp\l"] dnl 19 -> 23 [style=dashed label="@1"] dnl 19 -> "19R8" [style=solid] dnl "19R8" [label="R8", fillcolor=3, shape=diamond, style=filled] dnl 20 [label="State 20\n\l 11 exp: \"(\" exp • \")\"\l"] dnl 20 -> 24 [style=solid label="\")\""] dnl 21 [label="State 21\n\l 2 $accept: YY_PARSE_exp exp \"end of file\" •\l"] dnl 21 -> "21R2" [style=solid] dnl "21R2" [label="Acc", fillcolor=1, shape=diamond, style=filled] dnl 22 [label="State 22\n\l 6 assignment: id \":=\" • exp\l 10 exp: • \"incr\" exp @1 @2 exp\l 11 | • \"(\" exp \")\"\l 12 | • \"identifier\"\l 13 | • \"number\"\l"] dnl 22 -> 7 [style=solid label="\"incr\""] dnl 22 -> 8 [style=solid label="\"identifier\""] dnl 22 -> 9 [style=solid label="\"number\""] dnl 22 -> 10 [style=solid label="\"(\""] dnl 22 -> 25 [style=dashed label="exp"] dnl 23 [label="State 23\n\l 9 @2: • %empty\l 10 exp: \"incr\" exp @1 • @2 exp\l"] dnl 23 -> 26 [style=dashed label="@2"] dnl 23 -> "23R9" [style=solid] dnl "23R9" [label="R9", fillcolor=3, shape=diamond, style=filled] dnl 24 [label="State 24\n\l 11 exp: \"(\" exp \")\" •\l"] dnl 24 -> "24R11" [style=solid] dnl "24R11" [label="R11", fillcolor=3, shape=diamond, style=filled] dnl 25 [label="State 25\n\l 6 assignment: id \":=\" exp •\l"] dnl 25 -> "25R6" [style=solid] dnl "25R6" [label="R6", fillcolor=3, shape=diamond, style=filled] dnl 26 [label="State 26\n\l 10 exp: • \"incr\" exp @1 @2 exp\l 10 | \"incr\" exp @1 @2 • exp\l 11 | • \"(\" exp \")\"\l 12 | • \"identifier\"\l 13 | • \"number\"\l"] dnl 26 -> 7 [style=solid label="\"incr\""] dnl 26 -> 8 [style=solid label="\"identifier\""] dnl 26 -> 9 [style=solid label="\"number\""] dnl 26 -> 10 [style=solid label="\"(\""] dnl 26 -> 27 [style=dashed label="exp"] dnl 27 [label="State 27\n\l 10 exp: \"incr\" exp @1 @2 exp •\l"] dnl 27 -> "27R10" [style=solid] dnl "27R10" [label="R10", fillcolor=3, shape=diamond, style=filled] dnl } dnl ]]) dnl dnl dnl AT_CHECK([[cat input.xml]], [], dnl [[ dnl dnl dnl dnl input.yy dnl dnl dnl dnl dnl $accept dnl dnl YY_PARSE_unit dnl unit dnl "end of file" dnl dnl dnl dnl $accept dnl dnl YY_PARSE_assignments dnl assignments dnl "end of file" dnl dnl dnl dnl $accept dnl dnl YY_PARSE_exp dnl exp dnl "end of file" dnl dnl dnl dnl unit dnl dnl assignments dnl exp dnl dnl dnl dnl assignments dnl dnl dnl dnl dnl dnl assignments dnl dnl assignments dnl assignment dnl dnl dnl dnl assignment dnl dnl id dnl ":=" dnl exp dnl dnl dnl dnl id dnl dnl "identifier" dnl dnl dnl dnl @1 dnl dnl dnl dnl dnl dnl @2 dnl dnl dnl dnl dnl dnl exp dnl dnl "incr" dnl exp dnl @1 dnl @2 dnl exp dnl dnl dnl dnl exp dnl dnl "(" dnl exp dnl ")" dnl dnl dnl dnl exp dnl dnl "identifier" dnl dnl dnl dnl exp dnl dnl "number" dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl ":=" dnl dnl dnl dnl dnl "end of file" dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl dnl ]]) dnl dnl if test x"$XSLTPROC" != x""; then dnl AT_CHECK([[$XSLTPROC \ dnl `]]AT_SET_ENV[[ bison --print-datadir`/xslt/xml2xhtml.xsl \ dnl input.xml >input.html]]) dnl AT_CHECK_HTML([input.html], dnl [[ dnl dnl dnl dnl dnl input.yy - GNU Bison XML Automaton Report dnl dnl dnl

GNU Bison XML Automaton Report

dnl input grammar: input.yy

dnl dnl

Table of Contents

Reductions

Nonterminals useless in grammar

dnl dnl

Terminals unused in grammar

dnl dnl

Rules useless in grammar

dnl

Conflicts

dnl dnl

Grammar

dnl

dnl 0 $acceptYY_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 unitassignments exp dnl dnl 4 assignments → %empty dnl 5 | assignments assignment dnl dnl 6 assignmentid ":=" 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 dnl

Terminals, with rules where they appear

dnl dnl
    dnl
  • "end of file" (0) 0 1 2
  • dnl
  • error (256)
  • dnl
  • ":=" (258) 6
  • dnl
  • "incr" (259) 10
  • dnl
  • "identifier" <std::string> (260) 7 12
  • dnl
  • "number" <int> (261) 13
  • dnl
  • YY_PARSE_unit (262) 0
  • dnl
  • YY_PARSE_assignments (263) 1
  • dnl
  • YY_PARSE_exp (264) 2
  • dnl
  • "(" (265) 11
  • dnl
  • ")" (266) 11
  • dnl
dnl dnl

Nonterminals, with rules where they appear

dnl dnl
    dnl
  • $accept (12) dnl
      dnl
    • on left: 0 1 2
    • dnl
    dnl
  • dnl
  • unit (13) dnl
      dnl
    • on left: 3
    • dnl
    • on right: 0
    • dnl
    dnl
  • dnl
  • assignments (14) dnl
      dnl
    • on left: 4 5
    • dnl
    • on right: 1 3 5
    • dnl
    dnl
  • dnl
  • assignment (15) dnl
      dnl
    • on left: 6
    • dnl
    • on right: 5
    • dnl
    dnl
  • dnl
  • id <std::string> (16) dnl
      dnl
    • on left: 7
    • dnl
    • on right: 6
    • dnl
    dnl
  • dnl
  • exp <int> (17) dnl dnl
  • dnl
  • @1 <int> (18) dnl
      dnl
    • on left: 8
    • dnl
    • on right: 10
    • dnl
    dnl
  • dnl
  • @2 <int> (19) dnl
      dnl
    • on left: 9
    • dnl
    • on right: 10
    • dnl
    dnl
  • dnl

Automaton

dnl dnl

State 0

dnl dnl

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 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 dnl

State 1

dnl dnl

0 $acceptYY_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 dnl

State 2

dnl dnl

1 $acceptYY_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 dnl

State 3

dnl dnl

2 $acceptYY_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 dnl

State 4

dnl dnl

0 $acceptYY_PARSE_unit unit "end of file" dnl dnl "end of file" shift, and go to state 12 dnl

dnl dnl

State 5

dnl dnl

3 unitassignments exp dnl 5 assignmentsassignments 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 dnl

State 6

dnl dnl

1 $acceptYY_PARSE_assignments assignments "end of file" dnl 5 assignmentsassignments 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 dnl

State 7

dnl dnl

10 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 dnl

State 8

dnl dnl

12 exp"identifier" dnl dnl $default reduce using rule 12 (exp) dnl

dnl dnl

State 9

dnl dnl

13 exp"number" dnl dnl $default reduce using rule 13 (exp) dnl

dnl dnl

State 10

dnl dnl

10 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 dnl

State 11

dnl dnl

2 $acceptYY_PARSE_exp exp "end of file" dnl dnl "end of file" shift, and go to state 21 dnl

dnl dnl

State 12

dnl dnl

0 $acceptYY_PARSE_unit unit "end of file" dnl dnl $default accept dnl

dnl dnl

State 13

dnl dnl

7 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 dnl

State 14

dnl dnl

5 assignmentsassignments assignment dnl dnl $default reduce using rule 5 (assignments) dnl

dnl dnl

State 15

dnl dnl

6 assignmentid ":=" exp dnl dnl ":=" shift, and go to state 22 dnl

dnl dnl

State 16

dnl dnl

3 unitassignments exp dnl dnl $default reduce using rule 3 (unit) dnl

dnl dnl

State 17

dnl dnl

1 $acceptYY_PARSE_assignments assignments "end of file" dnl dnl $default accept dnl

dnl dnl

State 18

dnl dnl

7 id"identifier" dnl dnl $default reduce using rule 7 (id) dnl

dnl dnl

State 19

dnl dnl

8 @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 dnl

State 20

dnl dnl

11 exp"(" exp ")" dnl dnl ")" shift, and go to state 24 dnl

dnl dnl

State 21

dnl dnl

2 $acceptYY_PARSE_exp exp "end of file" dnl dnl $default accept dnl

dnl dnl

State 22

dnl dnl

6 assignmentid ":=" 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 dnl

State 23

dnl dnl

9 @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 dnl

State 24

dnl dnl

11 exp"(" exp ")" dnl dnl $default reduce using rule 11 (exp) dnl

dnl dnl

State 25

dnl dnl

6 assignmentid ":=" exp dnl dnl $default reduce using rule 6 (assignment) dnl

dnl dnl

State 26

dnl dnl

10 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 dnl

State 27

dnl dnl

10 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 to . // Home page: . digraph "input.y" { node [fontname = courier, shape = box, colorscheme = paired6] edge [fontname = courier] 0 [label="State 0\n\l 0 $accept: • exp $end\l 1 exp: • exp \"⊕\" exp\l 2 | • exp \"+\" exp\l 3 | • exp \"+\" exp\l 4 | • \"number\"\l 5 | • \"Ñùṃéℝô\"\l"] 0 -> 1 [style=solid label="\"number\""] 0 -> 2 [style=solid label="\"Ñùṃéℝô\""] 0 -> 3 [style=dashed label="exp"] 1 [label="State 1\n\l 4 exp: \"number\" •\l"] 1 -> "1R4" [style=solid] "1R4" [label="R4", fillcolor=3, shape=diamond, style=filled] 2 [label="State 2\n\l 5 exp: \"Ñùṃéℝô\" •\l"] 2 -> "2R5" [style=solid] "2R5" [label="R5", fillcolor=3, shape=diamond, style=filled] 3 [label="State 3\n\l 0 $accept: exp • $end\l 1 exp: exp • \"⊕\" exp\l 2 | exp • \"+\" exp\l 3 | exp • \"+\" exp\l"] 3 -> 4 [style=solid label="$end"] 3 -> 5 [style=solid label="\"+\""] 3 -> 6 [style=solid label="\"⊕\""] 4 [label="State 4\n\l 0 $accept: exp $end •\l"] 4 -> "4R0" [style=solid] "4R0" [label="Acc", fillcolor=1, shape=diamond, style=filled] 5 [label="State 5\n\l 1 exp: • exp \"⊕\" exp\l 2 | • exp \"+\" exp\l 2 | exp \"+\" • exp\l 3 | • exp \"+\" exp\l 3 | exp \"+\" • exp\l 4 | • \"number\"\l 5 | • \"Ñùṃéℝô\"\l"] 5 -> 1 [style=solid label="\"number\""] 5 -> 2 [style=solid label="\"Ñùṃéℝô\""] 5 -> 7 [style=dashed label="exp"] 6 [label="State 6\n\l 1 exp: • exp \"⊕\" exp\l 1 | exp \"⊕\" • exp\l 2 | • exp \"+\" exp\l 3 | • exp \"+\" exp\l 4 | • \"number\"\l 5 | • \"Ñùṃéℝô\"\l"] 6 -> 1 [style=solid label="\"number\""] 6 -> 2 [style=solid label="\"Ñùṃéℝô\""] 6 -> 8 [style=dashed label="exp"] 7 [label="State 7\n\l 1 exp: exp • \"⊕\" exp\l 2 | exp • \"+\" exp\l 2 | exp \"+\" exp • [$end, \"+\", \"⊕\"]\l 3 | exp • \"+\" exp\l 3 | exp \"+\" exp • [$end, \"+\", \"⊕\"]\l"] 7 -> 6 [style=solid label="\"⊕\""] 7 -> "7R2d" [label="[\"⊕\"]", style=solid] "7R2d" [label="R2", fillcolor=5, shape=diamond, style=filled] 7 -> "7R2" [style=solid] "7R2" [label="R2", fillcolor=3, shape=diamond, style=filled] 7 -> "7R3d" [label="[$end, \"+\", \"⊕\"]", style=solid] "7R3d" [label="R3", fillcolor=5, shape=diamond, style=filled] 8 [label="State 8\n\l 1 exp: exp • \"⊕\" exp\l 1 | exp \"⊕\" exp • [$end, \"+\", \"⊕\"]\l 2 | exp • \"+\" exp\l 3 | exp • \"+\" exp\l"] 8 -> 5 [style=solid label="\"+\""] 8 -> 6 [style=solid label="\"⊕\""] 8 -> "8R1d" [label="[\"+\", \"⊕\"]", style=solid] "8R1d" [label="R1", fillcolor=5, shape=diamond, style=filled] 8 -> "8R1" [style=solid] "8R1" [label="R1", fillcolor=3, shape=diamond, style=filled] } ]]) AT_CHECK([[cat input.xml]], [], [[ input.y $accept exp $end exp exp "⊕" exp exp exp "+" exp exp exp "+" exp exp "number" exp "Ñùṃéℝô" $end "+" "⊕" $end "+" "⊕" %left "+" $end "+" "⊕" ]]) AT_CHECK_HTML([input.html], [[ input.y - GNU Bison XML Automaton Report

GNU Bison XML Automaton Report

input grammar: input.y

Table of Contents

Reductions

Nonterminals useless in grammar

Terminals unused in grammar

Rules useless in grammar

Rules useless in parser due to conflicts

3 expexp "+" exp

Conflicts

State 7 conflicts: 1 shift/reduce, 3 reduce/reduce State 8 conflicts: 2 shift/reduce

Grammar

0 $acceptexp $end 1 expexp "⊕" 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)

Automaton

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 $acceptexp $end 1 expexp "⊕" 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 $acceptexp $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 expexp "⊕" 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 "+").

State 8

1 expexp "⊕" 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