X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/a034c8b84911a09b68d92ebbe9a90e08f21aef23..7d27c823deae06e004cc3c55f843964e24f518a7:/tests/regression.at diff --git a/tests/regression.at b/tests/regression.at index a18bfc45..f141c4b8 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -63,12 +63,14 @@ AT_CHECK([bison input.y -o input.c -v], 0, [], AT_CHECK([cat input.output], [], [[State 4 contains 1 shift/reduce conflict. + Grammar Number, Line, Rule 1 3 exp -> exp OP exp 2 3 exp -> NUM + Terminals, with rules where they appear $ (-1) @@ -76,6 +78,7 @@ error (256) NUM (257) 2 OP (258) 1 + Nonterminals, with rules where they appear exp (5) @@ -138,6 +141,8 @@ state 5 state 6 $default accept + + ]]) AT_CLEANUP @@ -162,12 +167,14 @@ AT_CHECK([bison input.y -o input.c -v], 0, [], []) AT_CHECK([cat input.output], [], [[Conflict in state 4 between rule 1 and token OP resolved as shift. + Grammar Number, Line, Rule 1 4 exp -> exp OP exp 2 4 exp -> NUM + Terminals, with rules where they appear $ (-1) @@ -175,6 +182,7 @@ error (256) NUM (257) 2 OP (258) 1 + Nonterminals, with rules where they appear exp (5) @@ -236,6 +244,153 @@ state 5 state 6 $default accept + + +]]) + +AT_CLEANUP + + + + +## ------------------- ## +## Rule Line Numbers. ## +## ------------------- ## + +AT_SETUP([Rule Line Numbers]) + +AT_DATA([input.y], +[[%% +expr: +'a' + +{ + +} + +'b' + +{ + +} + +| + + +{ + + +} + +'c' + +{ + +} +]]) + +AT_CHECK([bison input.y -o input.c -v], 0, [], []) + +# Check the contents of the report. +AT_CHECK([cat input.output], [], +[[Grammar + + Number, Line, Rule + 1 2 @1 -> /* empty */ + 2 2 expr -> 'a' @1 'b' + 3 15 @2 -> /* empty */ + 4 15 expr -> @2 'c' + + +Terminals, with rules where they appear + +$ (-1) +'a' (97) 2 +'b' (98) 2 +'c' (99) 4 +error (256) + + +Nonterminals, with rules where they appear + +expr (6) + on left: 2 4 +@1 (7) + on left: 1, on right: 2 +@2 (8) + on left: 3, on right: 4 + + +state 0 + + 'a' shift, and go to state 1 + + $default reduce using rule 3 (@2) + + expr go to state 6 + @2 go to state 2 + + + +state 1 + + expr -> 'a' . @1 'b' (rule 2) + + $default reduce using rule 1 (@1) + + @1 go to state 3 + + + +state 2 + + expr -> @2 . 'c' (rule 4) + + 'c' shift, and go to state 4 + + + +state 3 + + expr -> 'a' @1 . 'b' (rule 2) + + 'b' shift, and go to state 5 + + + +state 4 + + expr -> @2 'c' . (rule 4) + + $default reduce using rule 4 (expr) + + + +state 5 + + expr -> 'a' @1 'b' . (rule 2) + + $default reduce using rule 2 (expr) + + + +state 6 + + $ go to state 7 + + + +state 7 + + $ go to state 8 + + + +state 8 + + $default accept + + ]]) AT_CLEANUP @@ -380,9 +535,9 @@ AT_DATA([input.y], ]]) AT_CHECK([bison input.y], [1], [], -[input.y:2: invalid input: `?' +[[input.y:2: invalid input: `?' input.y:3: fatal error: no rules in the input grammar -]) +]]) AT_CLEANUP @@ -400,8 +555,29 @@ default: 'a' } ]]) AT_CHECK([bison input.y], [1], [], -[input.y:2: invalid input: `}' -]) +[[input.y:2: invalid input: `}' +]]) + +AT_CLEANUP + + + +## -------------------- ## +## Invalid %directive. ## +## -------------------- ## + + +AT_SETUP([Invalid %directive]) + +AT_DATA([input.y], +[[%invalid +]]) + +AT_CHECK([bison input.y], [1], [], +[[input.y:1: unrecognized: %invalid +input.y:1: Skipping to next % +input.y:2: fatal error: no input grammar +]]) AT_CLEANUP