我正在使用python模块ply.lex来编写词法分析器.我得到了一些用正则表达式指定的令牌,但现在我卡住了.我有一个应该是令牌的关键字列表. data是一个包含大约1000个关键字的列表,应该全部被识别为一种关键字.这可以是例如:_Function1 _UDFType2等等.列表中的所有单词都用空格分隔.我只是想让lexer识别出这个列表中的单词,这样它就会返回一个类型为`KEYWORD的标记.
data = 'Keyword1 Keyword2 Keyword3 Keyword4'
def t_KEYWORD(t):
# ... r'\$' + data ??
return t
text = '''
Some test data
even more
$var = 2231
$[]Test this 2.31 + / &
'''
autoit = lex.lex()
autoit.input(text)
while True:
tok = autoit.token()
if not tok: break
print(tok)
所以我试图将变量添加到该正则表达式,但它没有用.我总是开心的:
没有为规则’t_KEYWORD’定义正则表达式.
先感谢您!
约翰
解决方法:
正如@DSM建议你可以使用TOKEN decorator.正则表达式找到像cat或dog这样的标记是’cat | dog'(即用’|’而不是空格分隔的单词).所以尝试:
from ply.lex import TOKEN
data = data.split() #make data a list of keywords
@TOKEN('|'.join(data))
def t_KEYWORD(t):
return t