Files
bison/tests/sets.at
Akim Demaille 7c6b64d023 * src/lalr.c (lookaheads_print): New.
(lalr): Call it when --trace-flag.
* tests/sets.at (Nullable): Adjust: when tracing, the lookaheads
are dumped.
2001-12-29 14:16:16 +00:00

245 lines
4.0 KiB
Plaintext

# Exercising Bison Grammar Sets. -*- Autotest -*-
# Copyright 2001 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 2, 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
AT_BANNER([[Grammar Sets (Firsts etc.).]])
## ---------- ##
## Nullable. ##
## ---------- ##
AT_SETUP([Nullable])
# At some point, nullable had been smoking grass, and managed to say:
#
# Entering set_nullable
# NULLABLE
# 'e': yes
# (null): no
# ...
AT_DATA([[input.y]],
[[%%
e: 'e' | /* Nothing */;
]])
AT_CHECK([[bison --trace input.y]], [], [], [stderr])
AT_CHECK([[sed 's/[ ]*$//' stderr]], [],
[[RITEM
e $ (rule 1)
'e' (rule 2)
(rule 3)
DERIVES
$axiom derives
1: e $ (rule 0)
e derives
2: 'e' (rule 1)
3: (rule 2)
Entering set_nullable
NULLABLE
$axiom: no
e: yes
TC: Input BEGIN
01
.--.
0| 1|
1| |
`--'
TC: Input END
TC: Output BEGIN
01
.--.
0| 1|
1| |
`--'
TC: Output END
FIRSTS
$axiom firsts
4 ($axiom)
5 (e)
e firsts
5 (e)
FDERIVES
$axiom derives
1: e $
2: 'e'
3:
e derives
2: 'e'
3:
Processing state 0 (reached by $)
Closure: input
Closure: output
0: . e $ (rule 1)
3: . 'e' (rule 2)
5: . (rule 3)
Entering new_itemsets, state = 0
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
4: . (rule 2)
Closure: output
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:
transpose: output
0:
Lookaheads: BEGIN
State 0: 0 lookaheads
State 1: 0 lookaheads
State 2: 0 lookaheads
State 3: 0 lookaheads
Lookaheads: END
]])
AT_CLEANUP
## ---------------- ##
## Broken Closure. ##
## ---------------- ##
# TC was once broken during a massive `simplification' of the code.
# It resulted in bison dumping core on the following grammar (the
# computation of FIRSTS uses TC). It managed to produce a pretty
# exotic closure:
#
# TC: Input
#
# 01234567
# +--------+
# 0| 1 |
# 1| 1 |
# 2| 1 |
# 3| 1 |
# 4| 1 |
# 5| 1 |
# 6| 1|
# 7| |
# +--------+
#
# TC: Output
#
# 01234567
# +--------+
# 0| 1 |
# 1| 111 |
# 2| 111 |
# 3| 1111 |
# 4| 111 1 |
# 5| 111 1 |
# 6| 111 1|
# 7| 111 |
# +--------+
#
# instead of that below.
AT_SETUP([Broken Closure])
AT_DATA([input.y],
[[%%
a: b
b: c
c: d
d: e
e: f
f: g
g: h
h: 'h'
]])
AT_CHECK([[bison --trace input.y]], [], [], [stderr])
AT_CHECK([[sed -n 's/[ ]*$//;/^TC: Output BEGIN/,/^TC: Output END/p' stderr]], [],
[[TC: Output BEGIN
012345678
.---------.
0| 11111111|
1| 1111111|
2| 111111|
3| 11111|
4| 1111|
5| 111|
6| 11|
7| 1|
8| |
`---------'
TC: Output END
]])
AT_CLEANUP