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

cfbolz at codespeak.net cfbolz at codespeak.net
Sun Apr 29 22:52:38 CEST 2007


Author: cfbolz
Date: Sun Apr 29 22:52:37 2007
New Revision: 42449

Modified:
   pypy/dist/pypy/lang/js/jsgrammar.txt
   pypy/dist/pypy/lang/js/test/test_new_parser.py
Log:
make the grammar produce nicer trees for the case of expressions. now running
the test with --view is really cool :-)


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 22:52:37 2007
@@ -13,33 +13,33 @@
                 | statement
                 ;
 
-statement   : block
-            | variablestatement [";"]
+statement   : <block>
+            | <variablestatement> [";"]
             | [ ";" ] 
-            | expressionstatement [";"]
-            | ifstatement [";"]
-            | iterationstatement [";"]
-            | continuestatement [";"]
-            | breakstatement [";"]
-            | returnstatement [";"]
-            | withstatement [";"]
-            | labelledstatement [";"]
-            | switchstatement 
-            | throwstatement [";"]
-            | trystatement [";"]
+            | <expressionstatement> [";"]
+            | <ifstatement> [";"]
+            | <iterationstatement> [";"]
+            | <continuestatement> [";"]
+            | <breakstatement> [";"]
+            | <returnstatement> [";"]
+            | <withstatement> [";"]
+            | <labelledstatement> [";"]
+            | <switchstatement> 
+            | <throwstatement> [";"]
+            | <trystatement> [";"]
             ;
 
 block   : "{" statementlist? "}"
         ;
 
-statementlist   : statement statementlist
+statementlist   : statement >statementlist<
                 | statement
                 ;
 
 variablestatement   : ["var"] variabledeclarationlist
                     ; 
 
-variabledeclarationlist : variabledeclaration [","] variabledeclarationlist 
+variabledeclarationlist : variabledeclaration [","] >variabledeclarationlist<
                         | variabledeclaration
                         ;
 
@@ -87,6 +87,7 @@
             | ["{"] caseclauses? ["}"]
             ;
 
+# XXX this looks wrong to me
 caseclauses : caseclause caseclauses
             ;
 
@@ -110,14 +111,14 @@
 finally : ["finally"] block
         ;
 
-identifier  : IDENTIFIERNAME;
+identifier  : <IDENTIFIERNAME>;
 
 IDENTIFIERNAME  : "[a-zA-Z_$][a-zA-Z_0-9]*";
 
-literal : nullliteral
-        | booleanliteral
-        | numericliteral
-        | stringliteral
+literal : <nullliteral>
+        | <booleanliteral>
+        | <numericliteral>
+        | <stringliteral>
         ;
 
 nullliteral : "null";
@@ -126,8 +127,8 @@
                 | "false"
                 ;
 
-numericliteral  : DECIMALLITERAL
-                | HEXINTEGERLITERAL
+numericliteral  : <DECIMALLITERAL>
+                | <HEXINTEGERLITERAL>
                 ; 
 
 DECIMALLITERAL  : "(((0|[1-9][0-9]*)(\.[0-9]*)?)|(\.[0-9]+))([eE][\+\-]?[0-9]*)?"
@@ -136,8 +137,8 @@
 HEXINTEGERLITERAL   : "0[xX][0-9a-fA-F]+"
                     ;
 
-stringliteral   : SINGLESTRING
-                | DOUBLESTRING
+stringliteral   : <SINGLESTRING>
+                | <DOUBLESTRING>
                 ;
 
 SINGLESTRING    : "'([^']|\\')*'"
@@ -147,15 +148,15 @@
                 ;
 
 primaryexpression   : "this"
-                    | identifier 
-                    | literal
-                    | arrayliteral 
-                    | objectliteral 
-                    | "\(" expression "\)"
+                    | <identifier>
+                    | <literal>
+                    | <arrayliteral>
+                    | <objectliteral>
+                    | "\(" <expression> "\)"
                     ;
 
-arrayliteral    : "[" elementlist "]" 
-                | "[" elementlist "," "]"
+arrayliteral    : ["["] elementlist ["]"] 
+                | ["["] elementlist ["," "]"]
                 ;
 
 elementlist : assignmentexpression ("," assignmentexpression)*
@@ -174,9 +175,9 @@
 hpropertynameandvaluelist   : propertyname ":" assignmentexpression ","
                             ;
 
-propertyname    : identifier
-                | stringliteral
-                | numericliteral
+propertyname    : <identifier>
+                | <stringliteral>
+                | <numericliteral>
                 ; 
 
 functiondeclaration : "function" identifier "(" formalparameterlist? ")" "{" functionbody "}"
@@ -185,25 +186,25 @@
 functionexpression  : "function" identifier? "(" formalparameterlist? ")" "{" functionbody "}"
                     ;
 
-formalparameterlist : identifier "," formalparameterlist 
+formalparameterlist : identifier [","] >formalparameterlist<
                     | identifier
                     ;
 
 functionbody    : sourceelements
                 ;
 
-begmemberexpression : primaryexpression
-                    | functionexpression
+begmemberexpression : <primaryexpression>
+                    | <functionexpression>
                     ;
 
 memberexpression    : begmemberexpression "[" expression "]" memberexpression* 
                     | begmemberexpression "." identifier memberexpression*
                     | "new" memberexpression arguments
-                    | begmemberexpression
+                    | <begmemberexpression>
                     ;
 
 newexpression   : "new" newexpression
-                | memberexpression
+                | <memberexpression>
                 ;
 
 callexpression  : memberexpression arguments arguments callexpression* 
@@ -216,17 +217,16 @@
             | "(" argumentlist ")"
             ;
  
-argumentlist    : assignmentexpression
-                | assignmentexpression "," argumentlist
-                ;
+argumentlist    : assignmentexpression "," >argumentlist<
+                | assignmentexpression;
 
-lefthandsideexpression  : callexpression
-                        | newexpression
+lefthandsideexpression  : <callexpression>
+                        | <newexpression>
                         ; 
 
 postfixexpression   : lefthandsideexpression "++" 
                     | lefthandsideexpression "--"
-                    | lefthandsideexpression
+                    | <lefthandsideexpression>
                     ; 
 
 unaryexpression : "delete" unaryexpression 
@@ -234,73 +234,63 @@
                 | "typeof" unaryexpression
                 | "++" unaryexpression 
                 | "--" unaryexpression 
-                | "+" unaryexpression 
-                | "-" unaryexpression 
+                | PLM unaryexpression 
                 | "~" unaryexpression 
                 | "!" unaryexpression 
-                | postfixexpression
+                | <postfixexpression>
                 ;
 
-multiplicativeexpression    : unaryexpression "*" >multiplicativeexpression<
-                            | unaryexpression "/" >multiplicativeexpression<
-                            | unaryexpression "%" >multiplicativeexpression<
-                            | unaryexpression
+multop: "*" | "/" | "%";
+multiplicativeexpression    : unaryexpression (multop unaryexpression)+
+                            | <unaryexpression>
                             ;
-
-additiveexpression  : multiplicativeexpression "+" >additiveexpression<
-                    | multiplicativeexpression "-" >additiveexpression<
-                    | multiplicativeexpression
+PLM  : "\+|\-";
+additiveexpression  : multiplicativeexpression (PLM multiplicativeexpression)+
+                    | <multiplicativeexpression>
                     ;
 
-shiftexpression : additiveexpression "<<" >shiftexpression<
-                | additiveexpression ">>" >shiftexpression<
-                | additiveexpression ">>>" >shiftexpression<
-                | additiveexpression
+shiftop: "<<" | ">>" | ">>>";
+shiftexpression : additiveexpression (shiftop additiveexpression)+
+                | <additiveexpression>
                 ;
 
-relationalexpression    : shiftexpression "<" >relationalexpression<
-                        | shiftexpression ">" >relationalexpression<
-                        | shiftexpression "<=" >relationalexpression<
-                        | shiftexpression ">=" >relationalexpression<
-                        | shiftexpression "instanceof" >relationalexpression<
-                        | shiftexpression "in" >relationalexpression<
-                        | shiftexpression
+relationalop: "<" | ">" | "<=" | ">=" | "instanceof" | "in";
+relationalexpression    : shiftexpression (relationalop relationalexpression)+
+                        | <shiftexpression>
                         ;
 
-equalityexpression  : relationalexpression "==" <equalityexpression>
-                    | relationalexpression "!=" <equalityexpression> 
-                    | relationalexpression "===" <equalityexpression> 
-                    | relationalexpression "!==" <equalityexpression>
-                    | relationalexpression
+equalityop: "==" | "!=" | "===" | "!==";
+equalityexpression  : relationalexpression (equalityop relationalexpression)+
+                    | <relationalexpression>
                     ;
 
-bitwiseandexpression    : equalityexpression "&" >bitwiseandexpression<
-                        | equalityexpression
+bitwiseandexpression    : equalityexpression ("&" equalityexpression)+
+                        | <equalityexpression>
                         ;
 
-bitwisexorexpression    : bitwiseandexpression "^" >bitwisexorexpression<
-                        | bitwiseandexpression
+bitwisexorexpression    : bitwiseandexpression ("^" bitwiseandexpression)+
+                        | <bitwiseandexpression>
                         ;
 
-bitwiseorexpression     : bitwisexorexpression "|" >bitwiseorexpression<
-                        | bitwisexorexpression
+bitwiseorexpression     : bitwisexorexpression ("|" bitwisexorexpression)+
+                        | <bitwisexorexpression>
                         ; 
 
-logicalandexpression    : bitwiseorexpression "&&" >logicalandexpression<
-                        | bitwiseorexpression
+logicalandexpression    : bitwiseorexpression ("&&" bitwiseorexpression)+
+                        | <bitwiseorexpression>
                         ;
 
-logicalorexpression : logicalandexpression "||" >logicalorexpression<
-                    | logicalandexpression
+logicalorexpression : logicalandexpression ("||" logicalandexpression)+
+                    | <logicalandexpression>
                     ;
                     
 
 conditionalexpression   : logicalorexpression "?" assignmentexpression ":" assignmentexpression
-                        | logicalorexpression
+                        | <logicalorexpression>
                         ;
 
 assignmentexpression    : lefthandsideexpression assignmentoperator assignmentexpression
-                        | conditionalexpression
+                        | <conditionalexpression>
                         ;
 
 assignmentoperator: "=" |
@@ -316,75 +306,54 @@
                     "^=" |
                     "\|=" ;
 
-expression  : assignmentexpression "," >expression<
-            | assignmentexpression
+expression  : assignmentexpression ([","] assignmentexpression)+
+            | <assignmentexpression>
             ;
 
 #noin copy
 
-relationalexpressionnoin    : shiftexpression "<" relationalexpression
-                            | shiftexpression ">" relationalexpression
-                            | shiftexpression "<=" relationalexpression
-                            | shiftexpression ">=" relationalexpression
-                            | shiftexpression "instanceof" relationalexpression
-#                           | shiftexpression "in" relationalexpression
-                            | shiftexpression
+relationalopnoin: "<" | ">" | "<=" | ">=" | "instanceof";
+relationalexpressionnoin    : shiftexpression (relationalopnoin shiftexpression)+
+                            | <shiftexpression>
                             ;
 
-
-equalityexpressionnoin  : relationalexpressionnoin "==" equalityexpressionnoin
-                    | relationalexpressionnoin "!=" equalityexpressionnoin 
-                    | relationalexpressionnoin "===" equalityexpressionnoin 
-                    | relationalexpressionnoin "!==" equalityexpressionnoin
-                    | relationalexpressionnoin
+equalityexpressionnoin  : relationalexpressionnoin (equalityop equalityexpressionnoin)+
+                    | <relationalexpressionnoin>
                     ;
 
-bitwiseandexpressionnoin    : equalityexpressionnoin "&" bitwiseandexpressionnoin
-                        | equalityexpressionnoin
+bitwiseandexpressionnoin    : equalityexpressionnoin ("&" equalityexpressionnoin)+
+                        | <equalityexpressionnoin>
                         ;
 
-bitwisexorexpressionnoin    : bitwiseandexpressionnoin "^" bitwisexorexpressionnoin
-                        | bitwiseandexpressionnoin
+bitwisexorexpressionnoin    : bitwiseandexpressionnoin ("^" bitwiseandexpressionnoin)+
+                        | <bitwiseandexpressionnoin>
                         ;
 
-bitwiseorexpressionnoin     : bitwisexorexpressionnoin "|" bitwiseorexpressionnoin
-                        | bitwisexorexpressionnoin
+bitwiseorexpressionnoin     : bitwisexorexpressionnoin ("|" bitwisexorexpressionnoin)+
+                        | <bitwisexorexpressionnoin>
                         ; 
 
-logicalandexpressionnoin    : bitwiseorexpressionnoin "&&" logicalandexpressionnoin
-                        | bitwiseorexpressionnoin
+logicalandexpressionnoin    : bitwiseorexpressionnoin ("&&" bitwiseorexpressionnoin)+
+                        | <bitwiseorexpressionnoin>
                         ;
 
-logicalorexpressionnoin : logicalandexpressionnoin "||" logicalorexpressionnoin
-                    | logicalandexpressionnoin
+logicalorexpressionnoin : logicalandexpressionnoin ("||" logicalandexpressionnoin)+
+                    | <logicalandexpressionnoin>
                     ;
 
 
 conditionalexpressionnoin
                     : logicalorexpressionnoin "?" assignmentexpressionnoin ":" assignmentexpressionnoin
-                    | logicalorexpressionnoin
+                    | <logicalorexpressionnoin>
                     ;
 
 #lefthandside
-assignmentexpressionnoin    : lefthandsideexpression assignmentoperatornoin assignmentexpressionnoin
-                        | conditionalexpressionnoin
+assignmentexpressionnoin    : lefthandsideexpression assignmentoperator assignmentexpressionnoin
+                        | <conditionalexpressionnoin>
                         ;
 
-assignmentoperatornoin: "=" |
-                        "\*=" |
-                        "\/=" |
-                        "\%=" |
-                        "\+=" |
-                        "\-=" |
-                        "<<=" |
-                        ">>=" |
-                        ">>>=" |
-                        "&=" |
-                        "^=" |
-                        "\|=";
-
-expressionnoin  : assignmentexpressionnoin "," expressionnoin
-            | assignmentexpressionnoin
+expressionnoin  : assignmentexpressionnoin ([","] assignmentexpressionnoin)+
+            | <assignmentexpressionnoin>
             ;
 
 #identifier

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 22:52:37 2007
@@ -1,3 +1,4 @@
+from __future__ import division
 
 import py
 from pypy.rlib.parsing.ebnfparse import parse_ebnf, make_parse_function



More information about the Pypy-commit mailing list