]> git.saurik.com Git - bison.git/commitdiff
Support parens in calc++.
authorAkim Demaille <demaille@gostai.com>
Thu, 21 Aug 2008 20:39:01 +0000 (22:39 +0200)
committerAkim Demaille <demaille@gostai.com>
Tue, 11 Nov 2008 15:08:44 +0000 (16:08 +0100)
* doc/bison.texinfo (Calc++ Scanner, Calc++ Parser): Support parens.
* examples/calc++/test (run): Check the expected output.
Adjust callers.
Check parens too.

ChangeLog
doc/bison.texinfo
examples/calc++/test

index 7931aaffbdfea98522d06fbc6b8dd96d9e6621a4..e03a10431177469aee5d7fb6f89eee418b494b01 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        Simplify lalr1.cc since %defines is mandatory.
index ae3dc4b014d55f104072a921aa4f36561717a5f2..70f62672a223abf88609df4c6e4280426568554a 100644 (file)
@@ -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;
 %@}
            /* 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;
 @{int@}      @{
   errno = 0;
index b6f0942c722aeedca20749ba6add0edbfe61f76a..2aa917bc070f5ef3c3e7c6559232cb5df5dbf679 100755 (executable)
@@ -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 -s
 
-rm input
+rm input out_eff
 $exit