[pypy-svn] r42438 - in pypy/dist/pypy/lang/js: . test

santagada at codespeak.net santagada at codespeak.net
Sun Apr 29 20:05:37 CEST 2007


Author: santagada
Date: Sun Apr 29 20:05:37 2007
New Revision: 42438

Modified:
   pypy/dist/pypy/lang/js/jsgrammar.txt
   pypy/dist/pypy/lang/js/test/test_new_parser.py
Log:
made the tree evaluator not use python operator priority and made some changes on the grammar to make it really works

Modified: pypy/dist/pypy/lang/js/jsgrammar.txt
==============================================================================
--- pypy/dist/pypy/lang/js/jsgrammar.txt	(original)
+++ pypy/dist/pypy/lang/js/jsgrammar.txt	Sun Apr 29 20:05:37 2007
@@ -231,7 +231,7 @@
 
 unaryexpression : "delete" unaryexpression 
                 | "void" unaryexpression 
-                | "typeof" unaryexpression 
+                | "typeof" unaryexpression
                 | "++" unaryexpression 
                 | "--" unaryexpression 
                 | "+" unaryexpression 
@@ -241,57 +241,56 @@
                 | postfixexpression
                 ;
 
-multiplicativeexpression    : unaryexpression "*" multiplicativeexpression
-                            | unaryexpression "/" multiplicativeexpression
-                            | unaryexpression "%" multiplicativeexpression
+multiplicativeexpression    : unaryexpression "*" >multiplicativeexpression<
+                            | unaryexpression "/" >multiplicativeexpression<
+                            | unaryexpression "%" >multiplicativeexpression<
                             | unaryexpression
                             ;
-                            
 
 additiveexpression  : multiplicativeexpression "+" >additiveexpression<
                     | multiplicativeexpression "-" >additiveexpression<
-                    | <multiplicativeexpression>
+                    | multiplicativeexpression
                     ;
 
-shiftexpression : additiveexpression "<<" shiftexpression
-                | additiveexpression ">>" shiftexpression
-                | additiveexpression ">>>" shiftexpression
+shiftexpression : additiveexpression "<<" >shiftexpression<
+                | additiveexpression ">>" >shiftexpression<
+                | additiveexpression ">>>" >shiftexpression<
                 | additiveexpression
                 ;
 
-relationalexpression    : shiftexpression "<" relationalexpression
-                        | shiftexpression ">" relationalexpression
-                        | shiftexpression "<=" relationalexpression
-                        | shiftexpression ">=" relationalexpression
-                        | shiftexpression "instanceof" relationalexpression
-                        | shiftexpression "in" relationalexpression
+relationalexpression    : shiftexpression "<" >relationalexpression<
+                        | shiftexpression ">" >relationalexpression<
+                        | shiftexpression "<=" >relationalexpression<
+                        | shiftexpression ">=" >relationalexpression<
+                        | shiftexpression "instanceof" >relationalexpression<
+                        | shiftexpression "in" >relationalexpression<
                         | shiftexpression
                         ;
 
-equalityexpression  : relationalexpression "==" equalityexpression
-                    | relationalexpression "!=" equalityexpression 
-                    | relationalexpression "===" equalityexpression 
-                    | relationalexpression "!==" equalityexpression
+equalityexpression  : relationalexpression "==" <equalityexpression>
+                    | relationalexpression "!=" <equalityexpression> 
+                    | relationalexpression "===" <equalityexpression> 
+                    | relationalexpression "!==" <equalityexpression>
                     | relationalexpression
                     ;
 
-bitwiseandexpression    : equalityexpression "&" bitwiseandexpression
+bitwiseandexpression    : equalityexpression "&" >bitwiseandexpression<
                         | equalityexpression
                         ;
 
-bitwisexorexpression    : bitwiseandexpression "^" bitwisexorexpression
+bitwisexorexpression    : bitwiseandexpression "^" >bitwisexorexpression<
                         | bitwiseandexpression
                         ;
 
-bitwiseorexpression     : bitwisexorexpression "|" bitwiseorexpression
+bitwiseorexpression     : bitwisexorexpression "|" >bitwiseorexpression<
                         | bitwisexorexpression
                         ; 
 
-logicalandexpression    : bitwiseorexpression "&&" logicalandexpression
+logicalandexpression    : bitwiseorexpression "&&" >logicalandexpression<
                         | bitwiseorexpression
                         ;
 
-logicalorexpression : logicalandexpression "||" logicalorexpression
+logicalorexpression : logicalandexpression "||" >logicalorexpression<
                     | logicalandexpression
                     ;
                     
@@ -317,7 +316,7 @@
                     "^=" |
                     "\|=" ;
 
-expression  : assignmentexpression "," expression
+expression  : assignmentexpression "," >expression<
             | assignmentexpression
             ;
 

Modified: pypy/dist/pypy/lang/js/test/test_new_parser.py
==============================================================================
--- pypy/dist/pypy/lang/js/test/test_new_parser.py	(original)
+++ pypy/dist/pypy/lang/js/test/test_new_parser.py	Sun Apr 29 20:05:37 2007
@@ -87,7 +87,11 @@
             return self.dispatch(node.children[0])
         if len(node.children) >= 3:
             code = [str(self.dispatch(child)) for child in node.children]
-            return eval(" ".join(code))
+            print code
+            while len(code) >= 3:
+                r = eval("%s %s %s"%(code.pop(0), code.pop(0), code.pop(0)))
+                code.insert(0, r)
+            return code[0]
 
 
 class TestExpressions(BaseGrammarTest):
@@ -113,3 +117,5 @@
         self.parse_and_evaluate("1 + 2 * 3")
         self.parse_and_evaluate("1 * 2 + 3")
         self.parse_and_evaluate("1 - 3 - 3")
+        self.parse_and_evaluate("4 / 2 / 2")
+        



More information about the Pypy-commit mailing list