编程语言
首页 > 编程语言> > python – 包含可变数据的RegEx – ply.lex

python – 包含可变数据的RegEx – ply.lex

作者:互联网

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

标签:lexer,python,ply
来源: https://codeday.me/bug/20190901/1786111.html