1
# lexer for yacc-grammars
3
# Author: David Beazley (dave@dabeaz.com)
4
# Date : October 2, 2006
7
sys.path.append("../..")
12
'LITERAL','SECTION','TOKEN','LEFT','RIGHT','PREC','START','TYPE','NONASSOC','UNION','CODE',
13
'ID','QLITERAL','NUMBER',
16
states = (('code','exclusive'),)
18
literals = [ ';', ',', '<', '>', '|',':' ]
24
t_NONASSOC = r'%nonassoc'
29
t_ID = r'[a-zA-Z_][a-zA-Z_0-9]*'
30
t_QLITERAL = r'''(?P<quote>['"]).*?(?P=quote)'''
35
if getattr(t.lexer,"lastsection",0):
36
t.value = t.lexer.lexdata[t.lexpos+2:]
37
t.lexer.lexpos = len(t.lexer.lexdata)
39
t.lexer.lastsection = 0
45
t.lexer.lineno += t.value.count('\n')
47
t_ignore_cppcomment = r'//.*'
51
t.lexer.lineno += t.value.count("\n")
60
t.lexer.codestart = t.lexpos
64
def t_code_ignore_string(t):
65
r'\"([^\\\n]|(\\.))*?\"'
67
def t_code_ignore_char(t):
68
r'\'([^\\\n]|(\\.))*?\''
70
def t_code_ignore_comment(t):
73
def t_code_ignore_cppcom(t):
83
if t.lexer.level == 0:
85
t.value = t.lexer.lexdata[t.lexer.codestart:t.lexpos+1]
86
t.lexer.begin('INITIAL')
87
t.lexer.lineno += t.value.count('\n')
90
t_code_ignore_nonspace = r'[^\s\}\'\"\{]+'
91
t_code_ignore_whitespace = r'\s+'
98
print "%d: Illegal character '%s'" % (t.lexer.lineno, t.value[0])
104
if __name__ == '__main__':