ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-09-01 20:55:21  阅读:210  来源: 互联网

标签:lexer python ply


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有