2001-12-27 Akim Demaille <akim@epita.fr>
+ * tests/regression.at (Unresolved SR Conflicts):
+ (Solved SR Conflicts, Rule Line Numbers): Adjust to the changes
+ below.
+
+
+ * src/LR0.c (new_state): Recognize the final state by the fact it
+ is reached by eoftoken.
+ (insert_start_shifting_state, insert_eof_shifting_state)
+ (insert_accepting_state, augment_automaton): Remove, since now
+ these states are automatically computed from the initial state.
+ (generate_states): Adjust.
+ * src/print.c: When reporting a rule number to the user, substract
+ 1, so that the axiom rule is rule 0, and the first user rule is 1.
+ * src/reduce.c: Likewise.
+ * src/print_graph.c (print_core): For the time being, just as for
+ the report, depend upon --trace-flags to dump the full set of
+ items.
+ * src/reader.c (readgram): Once the grammar read, insert the rule
+ 0: `$axiom: START-SYMBOL $'.
+ * tests/set.at: Adjust: rule 0 is now displayed, and since the
+ number of the states has changed (the final state is no longer
+ necessarily the last), catch up.
+ * tests/regression.at: Partly catch up.
+
+
+2001-12-27 Akim Demaille <akim@epita.fr>
+
* src/LR0.c (new_state): Recognize the final state by the fact it
is reached by eoftoken.
(insert_start_shifting_state, insert_eof_shifting_state)
# Check the contents of the report.
AT_CHECK([cat input.output], [],
-[[State 4 contains 1 shift/reduce conflict.
+[[State 5 contains 1 shift/reduce conflict.
Grammar
Number, Line, Rule
+ 0 4 $axiom -> exp $
1 3 exp -> exp OP exp
2 3 exp -> NUM
Terminals, with rules where they appear
-$ (0)
+$ (0) 0
error (256)
NUM (257) 2
OP (258) 1
Nonterminals, with rules where they appear
-exp (5)
- on left: 1 2, on right: 1
+$axiom (5)
+ on left: 0
+exp (6)
+ on left: 1 2, on right: 0 1
state 0
state 2
+ $axiom -> exp . $ (rule 0)
exp -> exp . OP exp (rule 1)
- $ shift, and go to state 5
- OP shift, and go to state 3
+ $ shift, and go to state 3
+ OP shift, and go to state 4
state 3
- exp -> exp OP . exp (rule 1)
-
- NUM shift, and go to state 1
-
- exp go to state 4
+ $axiom -> exp $ . (rule 0)
+ $default accept
state 4
- exp -> exp . OP exp (rule 1)
- exp -> exp OP exp . (rule 1)
+ exp -> exp OP . exp (rule 1)
- OP shift, and go to state 3
+ NUM shift, and go to state 1
- OP [reduce using rule 1 (exp)]
- $default reduce using rule 1 (exp)
+ exp go to state 5
state 5
- $ shift, and go to state 6
-
+ exp -> exp . OP exp (rule 1)
+ exp -> exp OP exp . (rule 1)
+ OP shift, and go to state 4
-state 6
+ OP [reduce using rule 1 (exp)]
+ $default reduce using rule 1 (exp)
- $default accept
]])
# Check the contents of the report.
AT_CHECK([cat input.output], [],
-[[Conflict in state 4 between rule 1 and token OP resolved as shift.
+[[Conflict in state 5 between rule 2 and token OP resolved as shift.
Grammar
Number, Line, Rule
+ 0 5 $axiom -> exp $
1 4 exp -> exp OP exp
2 4 exp -> NUM
Terminals, with rules where they appear
-$ (0)
+$ (0) 0
error (256)
NUM (257) 2
OP (258) 1
Nonterminals, with rules where they appear
-exp (5)
- on left: 1 2, on right: 1
+$axiom (5)
+ on left: 0
+exp (6)
+ on left: 1 2, on right: 0 1
state 0
state 2
+ $axiom -> exp . $ (rule 0)
exp -> exp . OP exp (rule 1)
- $ shift, and go to state 5
- OP shift, and go to state 3
+ $ shift, and go to state 3
+ OP shift, and go to state 4
state 3
- exp -> exp OP . exp (rule 1)
-
- NUM shift, and go to state 1
-
- exp go to state 4
+ $axiom -> exp $ . (rule 0)
+ $default accept
state 4
- exp -> exp . OP exp (rule 1)
- exp -> exp OP exp . (rule 1)
+ exp -> exp OP . exp (rule 1)
- OP shift, and go to state 3
+ NUM shift, and go to state 1
- $default reduce using rule 1 (exp)
+ exp go to state 5
state 5
- $ shift, and go to state 6
-
+ exp -> exp . OP exp (rule 1)
+ exp -> exp OP exp . (rule 1)
+ OP shift, and go to state 4
-state 6
+ $default reduce using rule 1 (exp)
- $default accept
]])
[[Grammar
Number, Line, Rule
+ 0 28 $axiom -> expr $
1 2 @1 -> /* empty */
2 2 expr -> 'a' @1 'b'
3 15 @2 -> /* empty */
Terminals, with rules where they appear
-$ (0)
+$ (0) 0
'a' (97) 2
'b' (98) 2
'c' (99) 4
Nonterminals, with rules where they appear
-expr (6)
- on left: 2 4
-@1 (7)
+$axiom (6)
+ on left: 0
+expr (7)
+ on left: 2 4, on right: 0
+@1 (8)
on left: 1, on right: 2
-@2 (8)
+@2 (9)
on left: 3, on right: 4
'a' shift, and go to state 1
- $default reduce using rule 3 (@2)
-
- expr go to state 6
- @2 go to state 2
+ expr go to state 2
+ @2 go to state 3
$default reduce using rule 1 (@1)
- @1 go to state 3
+ @1 go to state 4
state 2
- expr -> @2 . 'c' (rule 4)
+ $axiom -> expr . $ (rule 0)
- 'c' shift, and go to state 4
+ $ shift, and go to state 5
state 3
- expr -> 'a' @1 . 'b' (rule 2)
+ expr -> @2 . 'c' (rule 4)
- 'b' shift, and go to state 5
+ 'c' shift, and go to state 6
state 4
- expr -> @2 'c' . (rule 4)
+ expr -> 'a' @1 . 'b' (rule 2)
- $default reduce using rule 4 (expr)
+ 'b' shift, and go to state 7
state 5
- expr -> 'a' @1 'b' . (rule 2)
-
- $default reduce using rule 2 (expr)
+ $axiom -> expr $ . (rule 0)
+ $default accept
state 6
- $ shift, and go to state 7
+ expr -> @2 'c' . (rule 4)
+
+ $default reduce using rule 4 (expr)
state 7
- $default accept
+ expr -> 'a' @1 'b' . (rule 2)
+
+ $default reduce using rule 2 (expr)
+
]])