[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