summaryrefslogtreecommitdiff
path: root/test/lex_object.py
diff options
context:
space:
mode:
authorDavid Beazley <dave@dabeaz.com>2008-05-29 14:00:14 +0000
committerDavid Beazley <dave@dabeaz.com>2008-05-29 14:00:14 +0000
commit3d91085e98cd5d2ddd3822793ab33bbad8287f5c (patch)
tree81d1988b5dec2f2b51c465527a3fe103847808b0 /test/lex_object.py
parent912137883ba0ec6e0f0390c9664a7918ee529c14 (diff)
downloadply-3d91085e98cd5d2ddd3822793ab33bbad8287f5c.tar.gz
Revamped testing framework
Diffstat (limited to 'test/lex_object.py')
-rw-r--r--test/lex_object.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/lex_object.py b/test/lex_object.py
new file mode 100644
index 0000000..e10c95b
--- /dev/null
+++ b/test/lex_object.py
@@ -0,0 +1,55 @@
+# -----------------------------------------------------------------------------
+# lex_object.py
+# -----------------------------------------------------------------------------
+import sys
+
+if ".." not in sys.path: sys.path.insert(0,"..")
+import ply.lex as lex
+
+class CalcLexer:
+ tokens = (
+ 'NAME','NUMBER',
+ 'PLUS','MINUS','TIMES','DIVIDE','EQUALS',
+ 'LPAREN','RPAREN',
+ )
+
+ # Tokens
+
+ t_PLUS = r'\+'
+ t_MINUS = r'-'
+ t_TIMES = r'\*'
+ t_DIVIDE = r'/'
+ t_EQUALS = r'='
+ t_LPAREN = r'\('
+ t_RPAREN = r'\)'
+ t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*'
+
+ def t_NUMBER(self,t):
+ r'\d+'
+ try:
+ t.value = int(t.value)
+ except ValueError:
+ print "Integer value too large", t.value
+ t.value = 0
+ return t
+
+ t_ignore = " \t"
+
+ def t_newline(self,t):
+ r'\n+'
+ t.lineno += t.value.count("\n")
+
+ def t_error(self,t):
+ print "Illegal character '%s'" % t.value[0]
+ t.lexer.skip(1)
+
+
+calc = CalcLexer()
+
+# Build the lexer
+lex.lex(object=calc)
+lex.runmain(data="3+4")
+
+
+
+