* 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.
This commit is contained in:
Akim Demaille
2001-12-27 18:13:47 +00:00
parent 75142d452b
commit 30171f79ab
7 changed files with 154 additions and 241 deletions

View File

@@ -38,48 +38,63 @@ AT_DATA([[input.y]],
e: 'e' | /* Nothing */;
]])
AT_CHECK([[bison --trace input.y]], [], [],
AT_CHECK([[bison --trace input.y]], [], [], [stderr])
AT_CHECK([[sed 's/[ ]*$//' stderr]], [],
[[RITEM
'e' (rule 1)
(rule 2)
e $ (rule 1)
'e' (rule 2)
(rule 3)
DERIVES
$axiom derives
1: e (rule 0)
e derives
1: 'e' (rule 1)
2: (rule 2)
2: 'e' (rule 2)
3: (rule 3)
Entering set_nullable
NULLABLE
$axiom: yes
e: yes
TC: Input BEGIN
@&t@
0
.-.
0| |
`-'
01
.--.
0| 1|
1| |
`--'
TC: Input END
TC: Output BEGIN
@&t@
0
.-.
0| |
`-'
01
.--.
0| 1|
1| |
`--'
TC: Output END
FIRSTS
$axiom firsts
4 ($axiom)
5 (e)
e firsts
4 (e)
5 (e)
FDERIVES
$axiom derives
1: e $
2: 'e'
3:
e derives
1: 'e'
2:
2: 'e'
3:
Processing state 0 (reached by $)
@@ -87,8 +102,9 @@ Closure: input
Closure: output
0: . 'e' (rule 1)
2: . (rule 2)
0: . e $ (rule 1)
3: . 'e' (rule 2)
5: . (rule 3)
Entering new_itemsets, state = 0
@@ -96,22 +112,50 @@ Entering append_states, state = 0
Entering get_state, state = 0, symbol = 3 ('e')
Entering new_state, state = 0, symbol = 3 ('e')
Exiting get_state => 1
Entering get_state, state = 0, symbol = 5 (e)
Entering new_state, state = 0, symbol = 5 (e)
Exiting get_state => 2
Processing state 1 (reached by 'e')
Closure: input
1: . (rule 1)
4: . (rule 2)
Closure: output
1: . (rule 1)
4: . (rule 2)
Entering new_itemsets, state = 1
Entering append_states, state = 1
Processing state 2 (reached by e)
Closure: input
1: . $ (rule 1)
Closure: output
1: . $ (rule 1)
Entering new_itemsets, state = 2
Entering append_states, state = 2
Entering get_state, state = 2, symbol = 0 ($)
Entering new_state, state = 2, symbol = 0 ($)
Exiting get_state => 3
Processing state 3 (reached by $)
Closure: input
2: . (rule 1)
Closure: output
2: . (rule 1)
Entering new_itemsets, state = 3
Entering append_states, state = 3
transpose: input
0: @&t@
0:
transpose: output
0: @&t@
0:
]])
@@ -171,22 +215,23 @@ g: h
h: 'h'
]])
AT_CHECK([bison --trace input.y 2>&1 |
sed -n '/^TC: Output BEGIN/,/^TC: Output END/p'],
[0],
AT_CHECK([[bison --trace input.y]], [], [], [stderr])
AT_CHECK([[sed -n 's/[ ]*$//;/^TC: Output BEGIN/,/^TC: Output END/p' stderr]], [],
[[TC: Output BEGIN
@&t@
01234567
.--------.
0| 1111111|
1| 111111|
2| 11111|
3| 1111|
4| 111|
5| 11|
6| 1|
7| |
`--------'
012345678
.---------.
0| 11111111|
1| 1111111|
2| 111111|
3| 11111|
4| 1111|
5| 111|
6| 11|
7| 1|
8| |
`---------'
TC: Output END
]])