包含可变数据的正则表达式 - ply.lex

2024-05-08

我正在使用 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'.

先感谢您! 约翰


正如@DSM建议你可以使用令牌装饰器 http://www.dabeaz.com/ply/ply.html#ply_nn14。查找标记的正则表达式如下cat or dog is '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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包含可变数据的正则表达式 - ply.lex 的相关文章

随机推荐