[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