bison-patches
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]