From 2b4de69ff8b12d46f45ffd5429998e5c1dde6dd7 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 29 Aug 2011 10:01:23 -0400 Subject: [PATCH] add lexer skeleton --- parser/__init__.py | 0 parser/lexer.py | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 parser/__init__.py create mode 100644 parser/lexer.py diff --git a/parser/__init__.py b/parser/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/parser/lexer.py b/parser/lexer.py new file mode 100644 index 0000000..a986dcb --- /dev/null +++ b/parser/lexer.py @@ -0,0 +1,38 @@ + +import ply.lex as lex + +reserved = { + 'C': 'C', + } + +tokens = [ + 'LPAREN', + 'RPAREN', + 'SEMICOLON', + 'STRING', + 'ID', + ] + list(reserved.values()) + +t_LPAREN = r'\(' +t_RPAREN = r'\)' +t_SEMICOLON = r';' +t_STRING = r'"([^"])*"' + +t_ignore = ' \t\r' + +def t_ID(t): + r'[a-zA-Z_][a-zA-Z_0-9]*' + t.type = reserved.get(t.value, 'ID') + return t + +def t_newline(t): + r'\n+' + t.lexer.lineno += len(t.value) + return None + +def t_error(t): + print 'Illegal character "%s"' % t.value[0] + t.lexer.skip(1) + +def get_lexer(): + return lex.lex()