mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* tests/sets.at (AT_EXTRACT_SETS): New.
(Nullable): Use it. (Firsts): New.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2002-01-27 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* tests/sets.at (AT_EXTRACT_SETS): New.
|
||||||
|
(Nullable): Use it.
|
||||||
|
(Firsts): New.
|
||||||
|
|
||||||
2002-01-26 Akim Demaille <akim@epita.fr>
|
2002-01-26 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* tests/actions.at, tests/calc.at, tests/headers.at,
|
* tests/actions.at, tests/calc.at, tests/headers.at,
|
||||||
|
|||||||
219
tests/sets.at
219
tests/sets.at
@@ -1,5 +1,5 @@
|
|||||||
# Exercising Bison Grammar Sets. -*- Autotest -*-
|
# Exercising Bison Grammar Sets. -*- Autotest -*-
|
||||||
# Copyright 2001 Free Software Foundation, Inc.
|
# Copyright 2001, 2002 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -16,6 +16,45 @@
|
|||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
# 02111-1307, USA.
|
# 02111-1307, USA.
|
||||||
|
|
||||||
|
# AT_EXTRACT_SETS(INPUT, OUTPUT)
|
||||||
|
# ------------------------------
|
||||||
|
# Extract the information about the grammar sets from a bison
|
||||||
|
# trace output (INPUT), and save it in OUTPUT.
|
||||||
|
# And remember, there is no alternation in portable sed.
|
||||||
|
m4_define([AT_EXTRACT_SETS],
|
||||||
|
[AT_DATA([extract.sed],
|
||||||
|
[[#n
|
||||||
|
/^NULLABLE$/ {
|
||||||
|
:nullable
|
||||||
|
p
|
||||||
|
n
|
||||||
|
/^[ ]*$/! b nullable
|
||||||
|
}
|
||||||
|
/^FIRSTS$/ {
|
||||||
|
:firsts
|
||||||
|
p
|
||||||
|
n
|
||||||
|
/^[ ]*$/! b firsts
|
||||||
|
}
|
||||||
|
/^FDERIVES$/ {
|
||||||
|
:fderives
|
||||||
|
p
|
||||||
|
n
|
||||||
|
/^[ ]*$/! b fderives
|
||||||
|
}
|
||||||
|
/^DERIVES$/ {
|
||||||
|
:derives
|
||||||
|
p
|
||||||
|
n
|
||||||
|
/^[ ]*$/! b derives
|
||||||
|
}
|
||||||
|
]])
|
||||||
|
AT_CHECK([sed -f extract.sed $1], 0, [stdout])
|
||||||
|
AT_CHECK([mv stdout $2])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AT_BANNER([[Grammar Sets (Firsts etc.).]])
|
AT_BANNER([[Grammar Sets (Firsts etc.).]])
|
||||||
|
|
||||||
|
|
||||||
@@ -39,54 +78,23 @@ e: 'e' | /* Nothing */;
|
|||||||
]])
|
]])
|
||||||
|
|
||||||
AT_CHECK([[bison --trace input.y]], [], [], [stderr])
|
AT_CHECK([[bison --trace input.y]], [], [], [stderr])
|
||||||
|
AT_EXTRACT_SETS([stderr], [sets])
|
||||||
AT_CHECK([[sed 's/[ ]*$//' stderr]], [],
|
AT_CHECK([[cat sets]], [],
|
||||||
[[RITEM
|
[[DERIVES
|
||||||
e $ (rule 0)
|
|
||||||
'e' (rule 1)
|
|
||||||
(rule 2)
|
|
||||||
|
|
||||||
|
|
||||||
DERIVES
|
|
||||||
$axiom derives
|
$axiom derives
|
||||||
1: e $ (rule 0)
|
1: e $ (rule 0)
|
||||||
e derives
|
e derives
|
||||||
2: 'e' (rule 1)
|
2: 'e' (rule 1)
|
||||||
3: (rule 2)
|
3: (rule 2)
|
||||||
|
|
||||||
|
|
||||||
Entering set_nullable
|
|
||||||
NULLABLE
|
NULLABLE
|
||||||
$axiom: no
|
$axiom: no
|
||||||
e: yes
|
e: yes
|
||||||
|
|
||||||
|
|
||||||
TC: Input BEGIN
|
|
||||||
|
|
||||||
01
|
|
||||||
.--.
|
|
||||||
0| 1|
|
|
||||||
1| |
|
|
||||||
`--'
|
|
||||||
TC: Input END
|
|
||||||
|
|
||||||
TC: Output BEGIN
|
|
||||||
|
|
||||||
01
|
|
||||||
.--.
|
|
||||||
0| 1|
|
|
||||||
1| |
|
|
||||||
`--'
|
|
||||||
TC: Output END
|
|
||||||
|
|
||||||
FIRSTS
|
FIRSTS
|
||||||
$axiom firsts
|
$axiom firsts
|
||||||
4 ($axiom)
|
4 ($axiom)
|
||||||
5 (e)
|
5 (e)
|
||||||
e firsts
|
e firsts
|
||||||
5 (e)
|
5 (e)
|
||||||
|
|
||||||
|
|
||||||
FDERIVES
|
FDERIVES
|
||||||
$axiom derives
|
$axiom derives
|
||||||
0: e $
|
0: e $
|
||||||
@@ -95,78 +103,6 @@ FDERIVES
|
|||||||
e derives
|
e derives
|
||||||
1: 'e'
|
1: 'e'
|
||||||
2:
|
2:
|
||||||
|
|
||||||
|
|
||||||
Processing state 0 (reached by $)
|
|
||||||
Closure: input
|
|
||||||
|
|
||||||
|
|
||||||
Closure: output
|
|
||||||
0: . e $ (rule 0)
|
|
||||||
3: . 'e' (rule 1)
|
|
||||||
5: . (rule 2)
|
|
||||||
|
|
||||||
|
|
||||||
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 1)
|
|
||||||
|
|
||||||
|
|
||||||
Closure: output
|
|
||||||
4: . (rule 1)
|
|
||||||
|
|
||||||
|
|
||||||
Entering new_itemsets, state = 1
|
|
||||||
Entering append_states, state = 1
|
|
||||||
Processing state 2 (reached by e)
|
|
||||||
Closure: input
|
|
||||||
1: . $ (rule 0)
|
|
||||||
|
|
||||||
|
|
||||||
Closure: output
|
|
||||||
1: . $ (rule 0)
|
|
||||||
|
|
||||||
|
|
||||||
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 0)
|
|
||||||
|
|
||||||
|
|
||||||
Closure: output
|
|
||||||
2: . (rule 0)
|
|
||||||
|
|
||||||
|
|
||||||
Entering new_itemsets, state = 3
|
|
||||||
Entering append_states, state = 3
|
|
||||||
transpose: input
|
|
||||||
0:
|
|
||||||
|
|
||||||
transpose: output
|
|
||||||
0:
|
|
||||||
|
|
||||||
Lookaheads: BEGIN
|
|
||||||
State 0: 1 lookaheads
|
|
||||||
on 0 ($) -> rule -4
|
|
||||||
on 1 (error) -> rule -4
|
|
||||||
on 2 ($undefined.) -> rule -4
|
|
||||||
on 3 ('e') -> rule -4
|
|
||||||
State 1: 0 lookaheads
|
|
||||||
State 2: 0 lookaheads
|
|
||||||
State 3: 0 lookaheads
|
|
||||||
Lookaheads: END
|
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
@@ -246,3 +182,72 @@ TC: Output END
|
|||||||
]])
|
]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## -------- ##
|
||||||
|
## Firsts. ##
|
||||||
|
## -------- ##
|
||||||
|
|
||||||
|
AT_SETUP([Firsts])
|
||||||
|
|
||||||
|
AT_DATA([input.y],
|
||||||
|
[[%nonassoc '<' '>'
|
||||||
|
%left '+' '-'
|
||||||
|
%right '^' '='
|
||||||
|
%%
|
||||||
|
exp:
|
||||||
|
exp '<' exp
|
||||||
|
| exp '>' exp
|
||||||
|
| exp '+' exp
|
||||||
|
| exp '-' exp
|
||||||
|
| exp '^' exp
|
||||||
|
| exp '=' exp
|
||||||
|
| "exp"
|
||||||
|
;
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_CHECK([[bison --trace input.y]], [], [], [stderr])
|
||||||
|
AT_EXTRACT_SETS([stderr], [sets])
|
||||||
|
AT_CHECK([[cat sets]], [],
|
||||||
|
[[DERIVES
|
||||||
|
$axiom derives
|
||||||
|
1: exp $ (rule 0)
|
||||||
|
exp derives
|
||||||
|
2: exp '<' exp (rule 1)
|
||||||
|
3: exp '>' exp (rule 2)
|
||||||
|
4: exp '+' exp (rule 3)
|
||||||
|
5: exp '-' exp (rule 4)
|
||||||
|
6: exp '^' exp (rule 5)
|
||||||
|
7: exp '=' exp (rule 6)
|
||||||
|
8: "exp" (rule 7)
|
||||||
|
NULLABLE
|
||||||
|
$axiom: no
|
||||||
|
exp: no
|
||||||
|
FIRSTS
|
||||||
|
$axiom firsts
|
||||||
|
10 ($axiom)
|
||||||
|
11 (exp)
|
||||||
|
exp firsts
|
||||||
|
11 (exp)
|
||||||
|
FDERIVES
|
||||||
|
$axiom derives
|
||||||
|
0: exp $
|
||||||
|
1: exp '<' exp
|
||||||
|
2: exp '>' exp
|
||||||
|
3: exp '+' exp
|
||||||
|
4: exp '-' exp
|
||||||
|
5: exp '^' exp
|
||||||
|
6: exp '=' exp
|
||||||
|
7: "exp"
|
||||||
|
exp derives
|
||||||
|
1: exp '<' exp
|
||||||
|
2: exp '>' exp
|
||||||
|
3: exp '+' exp
|
||||||
|
4: exp '-' exp
|
||||||
|
5: exp '^' exp
|
||||||
|
6: exp '=' exp
|
||||||
|
7: "exp"
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_CLEANUP
|
||||||
|
|||||||
Reference in New Issue
Block a user