[pypy-svn] r65608 - in pypy/branch/parser-compiler/pypy/interpreter/pyparser: . test

benjamin at codespeak.net benjamin at codespeak.net
Sat Jun 6 01:35:57 CEST 2009


Author: benjamin
Date: Sat Jun  6 01:35:52 2009
New Revision: 65608

Added:
   pypy/branch/parser-compiler/pypy/interpreter/pyparser/pygram.py   (contents, props changed)
Modified:
   pypy/branch/parser-compiler/pypy/interpreter/pyparser/test/test_metaparser.py
Log:
test the metaparser by running it on Python grammar files


Added: pypy/branch/parser-compiler/pypy/interpreter/pyparser/pygram.py
==============================================================================
--- (empty file)
+++ pypy/branch/parser-compiler/pypy/interpreter/pyparser/pygram.py	Sat Jun  6 01:35:52 2009
@@ -0,0 +1,63 @@
+import token # Temporary until we move to the new parser.
+from pypy.interpreter.pyparser import parser, pytoken
+
+class PythonGrammar(parser.Grammar):
+
+    KEYWORD_TOKEN = token.NAME
+    TOKENS = token.__dict__
+
+opmap_raw = """
+( LPAR
+) RPAR
+[ LSQB
+] RSQB
+: COLON
+, COMMA
+; SEMI
++ PLUS
+- MINUS
+* STAR
+/ SLASH
+| VBAR
+& AMPER
+< LESS
+> GREATER
+= EQUAL
+. DOT
+% PERCENT
+` BACKQUOTE
+{ LBRACE
+} RBRACE
+@ AT
+== EQEQUAL
+!= NOTEQUAL
+<> NOTEQUAL
+<= LESSEQUAL
+>= GREATEREQUAL
+~ TILDE
+^ CIRCUMFLEX
+<< LEFTSHIFT
+>> RIGHTSHIFT
+** DOUBLESTAR
++= PLUSEQUAL
+-= MINEQUAL
+*= STAREQUAL
+/= SLASHEQUAL
+%= PERCENTEQUAL
+&= AMPEREQUAL
+|= VBAREQUAL
+^= CIRCUMFLEXEQUAL
+<<= LEFTSHIFTEQUAL
+>>= RIGHTSHIFTEQUAL
+**= DOUBLESTAREQUAL
+// DOUBLESLASH
+//= DOUBLESLASHEQUAL
+"""
+
+opmap = {}
+for line in opmap_raw.splitlines():
+    if line:
+        op, name = line.split()
+        opmap[op] = getattr(token, name)
+PythonGrammar.OPERATOR_MAP = opmap
+del opmap, opmap_raw

Modified: pypy/branch/parser-compiler/pypy/interpreter/pyparser/test/test_metaparser.py
==============================================================================
--- pypy/branch/parser-compiler/pypy/interpreter/pyparser/test/test_metaparser.py	(original)
+++ pypy/branch/parser-compiler/pypy/interpreter/pyparser/test/test_metaparser.py	Sat Jun  6 01:35:52 2009
@@ -1,8 +1,11 @@
 import py
+import os
+import glob
 import tokenize
 import token
 import StringIO
 from pypy.interpreter.pyparser.metaparser import ParserGenerator, PgenError
+from pypy.interpreter.pyparser.pygram import PythonGrammar
 from pypy.interpreter.pyparser import parser
 
 
@@ -35,6 +38,16 @@
         states, first = g.dfas[eval_sym]
         assert states == [[(0, 1)], [(0, 1)]]
 
+    def test_load_python_grammars(self):
+        gram_pat = os.path.join(os.path.dirname(__file__), "..", "data",
+                                "Grammar*")
+        for gram_file in glob.glob(gram_pat):
+            fp = open(gram_file, "r")
+            try:
+                ParserGenerator(fp.read()).build_grammar(PythonGrammar)
+            finally:
+                fp.close()
+
     def test_items(self):
         g = self.gram_for("foo: NAME STRING OP '+'")
         assert len(g.dfas) == 1



More information about the Pypy-commit mailing list