[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Support parens in calc++.
From: |
Akim Demaille |
Subject: |
[PATCH] Support parens in calc++. |
Date: |
Tue, 11 Nov 2008 15:11:54 -0000 |
* doc/bison.texinfo (Calc++ Scanner, Calc++ Parser): Support parens.
* examples/calc++/test (run): Check the expected output.
Adjust callers.
Check parens too.
---
ChangeLog | 8 ++++++++
doc/bison.texinfo | 3 ++-
examples/calc++/test | 37 ++++++++++++++++++++++++++++---------
3 files changed, 38 insertions(+), 10 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 7931aaf..e03a104 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2008-11-11 Akim Demaille <address@hidden>
+ 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 <address@hidden>
+
Simplify lalr1.cc since %defines is mandatory.
* data/lalr1.cc: Remove useless calls to b4_defines_if.
diff --git a/doc/bison.texinfo b/doc/bison.texinfo
index ae3dc4b..70f6267 100644
--- a/doc/bison.texinfo
+++ b/doc/bison.texinfo
@@ -8620,6 +8620,7 @@ exp: exp '+' exp @{ $$ = $1 + $3; @}
| exp '-' exp @{ $$ = $1 - $3; @}
| exp '*' exp @{ $$ = $1 * $3; @}
| exp '/' exp @{ $$ = $1 / $3; @}
+ | '(' exp ')' @{ $$ = $2; @}
| "identifier" @{ $$ = driver.variables[*$1]; delete $1; @}
| "number" @{ $$ = $1; @};
%%
@@ -8724,7 +8725,7 @@ It is convenient to use a typedef to shorten
typedef yy::calcxx_parser::token token;
address@hidden
/* 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;
@address@hidden @{
errno = 0;
diff --git a/examples/calc++/test b/examples/calc++/test
index b6f0942..2aa917b 100755
--- a/examples/calc++/test
+++ b/examples/calc++/test
@@ -13,17 +13,26 @@ number=1
# Exit status of this script.
exit=true
-# run EXPECTED-EXIT-STATUS [PARSER-OPTIONS]
-# -----------------------------------------
+# run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
+# ---------------------------------------------------------
run ()
{
# Effective and expected exit status.
local sta_exp=$1
shift
- ./calc++ "$@" input
+ local out_exp=$1
+ shift
+ ./calc++ "$@" input >out_eff
local sta_eff=$?
+ local out_eff=`cat out_eff`
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
printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \
$number $sta_exp $sta_eff
@@ -39,22 +48,32 @@ c := 3
d := a + b * c
d
EOF
-run 0
-run 0 -p
+run 0 7
+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
a := 1
d := a + b * c
EOF
-run 1 input
+run 1 '' input
cat >input <<EOF
toto := 1
toto
EOF
-run 0 -s
+run 0 1 -s
-rm input
+rm input out_eff
$exit
--
1.6.0.2.588.g3102
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Support parens in calc++.,
Akim Demaille <=