mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 17:23:02 +00:00
Support parens in calc++.
* doc/bison.texinfo (Calc++ Scanner, Calc++ Parser): Support parens. * examples/calc++/test (run): Check the expected output. Adjust callers. Check parens too.
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
2008-11-11 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
Support parens in calc++.
|
||||||
|
* doc/bison.texinfo (Calc++ Scanner, Calc++ Parser): Support parens.
|
||||||
|
* examples/calc++/test (run): Check the expected output.
|
||||||
|
Adjust callers.
|
||||||
|
Check parens too.
|
||||||
|
|
||||||
2008-11-11 Akim Demaille <demaille@gostai.com>
|
2008-11-11 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
Simplify lalr1.cc since %defines is mandatory.
|
Simplify lalr1.cc since %defines is mandatory.
|
||||||
|
|||||||
@@ -8620,6 +8620,7 @@ exp: exp '+' exp @{ $$ = $1 + $3; @}
|
|||||||
| exp '-' exp @{ $$ = $1 - $3; @}
|
| exp '-' exp @{ $$ = $1 - $3; @}
|
||||||
| exp '*' exp @{ $$ = $1 * $3; @}
|
| exp '*' exp @{ $$ = $1 * $3; @}
|
||||||
| exp '/' exp @{ $$ = $1 / $3; @}
|
| exp '/' exp @{ $$ = $1 / $3; @}
|
||||||
|
| '(' exp ')' @{ $$ = $2; @}
|
||||||
| "identifier" @{ $$ = driver.variables[*$1]; delete $1; @}
|
| "identifier" @{ $$ = driver.variables[*$1]; delete $1; @}
|
||||||
| "number" @{ $$ = $1; @};
|
| "number" @{ $$ = $1; @};
|
||||||
%%
|
%%
|
||||||
@@ -8724,7 +8725,7 @@ It is convenient to use a typedef to shorten
|
|||||||
typedef yy::calcxx_parser::token token;
|
typedef yy::calcxx_parser::token token;
|
||||||
%@}
|
%@}
|
||||||
/* Convert ints to the actual type of tokens. */
|
/* Convert ints to the actual type of tokens. */
|
||||||
[-+*/] return yy::calcxx_parser::token_type (yytext[0]);
|
[-+*/()] return yy::calcxx_parser::token_type (yytext[0]);
|
||||||
":=" return token::ASSIGN;
|
":=" return token::ASSIGN;
|
||||||
@{int@} @{
|
@{int@} @{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|||||||
@@ -13,17 +13,26 @@ number=1
|
|||||||
# Exit status of this script.
|
# Exit status of this script.
|
||||||
exit=true
|
exit=true
|
||||||
|
|
||||||
# run EXPECTED-EXIT-STATUS [PARSER-OPTIONS]
|
# run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
|
||||||
# -----------------------------------------
|
# ---------------------------------------------------------
|
||||||
run ()
|
run ()
|
||||||
{
|
{
|
||||||
# Effective and expected exit status.
|
# Effective and expected exit status.
|
||||||
local sta_exp=$1
|
local sta_exp=$1
|
||||||
shift
|
shift
|
||||||
./calc++ "$@" input
|
local out_exp=$1
|
||||||
|
shift
|
||||||
|
./calc++ "$@" input >out_eff
|
||||||
local sta_eff=$?
|
local sta_eff=$?
|
||||||
|
local out_eff=`cat out_eff`
|
||||||
if test $sta_eff -eq $sta_exp; then
|
if test $sta_eff -eq $sta_exp; then
|
||||||
printf "$me: PASS: %2d\n" $number
|
if test "$out_eff" = "$out_exp"; then
|
||||||
|
printf "$me: PASS: %2d\n" $number
|
||||||
|
else
|
||||||
|
printf "$me: FAIL: %2d (expected output: %s, effective: %s\n" \
|
||||||
|
$number "$out_exp" "$out_eff"
|
||||||
|
exit=false
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \
|
printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \
|
||||||
$number $sta_exp $sta_eff
|
$number $sta_exp $sta_eff
|
||||||
@@ -39,22 +48,32 @@ c := 3
|
|||||||
d := a + b * c
|
d := a + b * c
|
||||||
d
|
d
|
||||||
EOF
|
EOF
|
||||||
run 0
|
run 0 7
|
||||||
run 0 -p
|
run 0 7 -p
|
||||||
|
|
||||||
|
|
||||||
|
cat >input <<EOF
|
||||||
|
a := 1
|
||||||
|
b := 2
|
||||||
|
c := 3
|
||||||
|
d := (a + b) * c
|
||||||
|
d
|
||||||
|
EOF
|
||||||
|
run 0 9
|
||||||
|
|
||||||
|
|
||||||
cat >input <<EOF
|
cat >input <<EOF
|
||||||
a := 1
|
a := 1
|
||||||
d := a + b * c
|
d := a + b * c
|
||||||
EOF
|
EOF
|
||||||
run 1 input
|
run 1 '' input
|
||||||
|
|
||||||
|
|
||||||
cat >input <<EOF
|
cat >input <<EOF
|
||||||
toto := 1
|
toto := 1
|
||||||
toto
|
toto
|
||||||
EOF
|
EOF
|
||||||
run 0 -s
|
run 0 1 -s
|
||||||
|
|
||||||
rm input
|
rm input out_eff
|
||||||
$exit
|
$exit
|
||||||
|
|||||||
Reference in New Issue
Block a user