【发布时间】:2012-08-31 14:50:31
【问题描述】:
我正在使用 python 模块ply.lex 编写一个词法分析器。我得到了一些用正则表达式指定的标记,但现在我卡住了。我有一个list of Keywords,应该是token。 data 是一个包含大约 1000 个关键字的列表,这些关键字都应该被识别为一种关键字。例如:_Function1 _UDFType2 等等。列表中的所有单词都由空格分隔,就是这样。我只想让词法分析器识别此列表中的单词,以便它返回类型为“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)
所以我试图将变量添加到该正则表达式,但它没有工作。我总是开始:
No regular expression defined for rule 't_KEYWORD'.
提前感谢您! 约翰
【问题讨论】:
-
您使用什么代码将其添加到正则表达式(显示实际引发错误的代码)
-
我还是没跟上。该行已被注释掉。你能展示一个实际引发该错误的示例吗?
-
好吧,只需使用上面或此处的代码:
data = 'Keyword1 Keyword2 Keyword3 Keyword4' def t_KEYWORD(t): r'\$' + data return t -
该代码不会引发异常。正则表达式中实际使用
t_KEYWORD的行在哪里? -
好的,让我们备份一下。
ply已经有一个装饰器 --TOKEN-- 来做一些人们建议的文档字符串魔法。例如,请参阅here。但是我不确定您是否要构建 4 个单独的标记并分别识别它们中的每一个(这无论如何都不会这样做),或者您是否有一个具有四个变体的关键字,或者什么。你能把你的帖子编辑得更具体一点吗?