mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 18:23:03 +00:00
Fail on parse error in calc++.
* doc/bison.texinfo (calc++.cc): Propagate failures to the exit status. * examples/calc++/test ($me, $number, $exit, run): New. Use them to propagate errors to the exit status.
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
2008-11-03 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
Fail on parse error in calc++.
|
||||||
|
* doc/bison.texinfo (calc++.cc): Propagate failures to the exit
|
||||||
|
status.
|
||||||
|
* examples/calc++/test ($me, $number, $exit, run): New.
|
||||||
|
Use them to propagate errors to the exit status.
|
||||||
|
|
||||||
2008-11-03 Akim Demaille <demaille@gostai.com>
|
2008-11-03 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
Don't specify the skeleton twice in the example.
|
Don't specify the skeleton twice in the example.
|
||||||
|
|||||||
@@ -8713,6 +8713,7 @@ The top level file, @file{calc++.cc}, poses no problem.
|
|||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
@{
|
@{
|
||||||
|
int res = 0;
|
||||||
calcxx_driver driver;
|
calcxx_driver driver;
|
||||||
for (++argv; argv[0]; ++argv)
|
for (++argv; argv[0]; ++argv)
|
||||||
if (*argv == std::string ("-p"))
|
if (*argv == std::string ("-p"))
|
||||||
@@ -8721,6 +8722,9 @@ main (int argc, char *argv[])
|
|||||||
driver.trace_scanning = true;
|
driver.trace_scanning = true;
|
||||||
else if (!driver.parse (*argv))
|
else if (!driver.parse (*argv))
|
||||||
std::cout << driver.result << std::endl;
|
std::cout << driver.result << std::endl;
|
||||||
|
else
|
||||||
|
res = 1;
|
||||||
|
return res;
|
||||||
@}
|
@}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,33 @@ test -z "$VERBOSE" && {
|
|||||||
set -x
|
set -x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
me=`basename $0`
|
||||||
|
|
||||||
|
# Number of the current test.
|
||||||
|
number=1
|
||||||
|
|
||||||
|
# Exit status of this script.
|
||||||
|
exit=true
|
||||||
|
|
||||||
|
# run EXPECTED-EXIT-STATUS [PARSER-OPTIONS]
|
||||||
|
# -----------------------------------------
|
||||||
|
run ()
|
||||||
|
{
|
||||||
|
# Effective and expected exit status.
|
||||||
|
local sta_exp=$1
|
||||||
|
shift
|
||||||
|
./calc++ "$@" input
|
||||||
|
local sta_eff=$?
|
||||||
|
if test $sta_eff -eq $sta_exp; then
|
||||||
|
printf "$me: PASS: %2d\n" $number
|
||||||
|
else
|
||||||
|
printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \
|
||||||
|
$number $sta_exp $sta_eff
|
||||||
|
exit=false
|
||||||
|
fi
|
||||||
|
number=`expr $number + 1`
|
||||||
|
}
|
||||||
|
|
||||||
cat >input <<EOF
|
cat >input <<EOF
|
||||||
a := 1
|
a := 1
|
||||||
b := 2
|
b := 2
|
||||||
@@ -12,20 +39,22 @@ c := 3
|
|||||||
d := a + b * c
|
d := a + b * c
|
||||||
d
|
d
|
||||||
EOF
|
EOF
|
||||||
|
run 0
|
||||||
|
run 0 -p
|
||||||
|
|
||||||
./calc++ input
|
|
||||||
./calc++ -p input
|
|
||||||
|
|
||||||
cat >input <<EOF
|
cat >input <<EOF
|
||||||
a := 1
|
a := 1
|
||||||
d := a + b * c
|
d := a + b * c
|
||||||
EOF
|
EOF
|
||||||
./calc++ input
|
run 1 input
|
||||||
|
|
||||||
|
|
||||||
cat >input <<EOF
|
cat >input <<EOF
|
||||||
toto := 1
|
toto := 1
|
||||||
toto
|
toto
|
||||||
EOF
|
EOF
|
||||||
./calc++ -s input
|
run 0 -s
|
||||||
|
|
||||||
rm input
|
rm input
|
||||||
|
$exit
|
||||||
|
|||||||
Reference in New Issue
Block a user