我正在为一种自定义语言编写pythonic解析器,到目前为止,我已经有了这样的东西:
re1 = re.compile(r"...")
re2 = re.compile(r"...")
re3 = re.compile(r"...")
re4 = re.compile(r"...")
...
...现在我正在读取输入文件,对于每一行,如果我找到一个特定的关键字,那么我将使用一个特定的正则表达式。显然,这让我的生活变成了人间地狱,因为我正在做这样的事情:
if line.find("keyword1") >= 0
# Uses re1 to match the string
invoke_handler1()
elif line.find('keyword2") >= 0
# Uses re2 to match the string
invoke_handler2()
...同时,我不希望将给定的行与所有可能的正则表达式进行匹配,因为这将是一种浪费。在不丢弃我之前写的所有东西的情况下,有没有一种优雅的方法来解决这个问题,使它更有效率和可读性?
发布于 2011-03-08 04:50:56
您可以查看Python可用的many parser libraries之一,而不是使用滚动自己的解析器。
发布于 2011-03-08 04:51:07
我不认为这是您正在寻找的答案,但我认为您会更好地使用实际的词法分析器和Tokenizer来解析您的语言。我建议研究并学习使用PLY来完成这类任务。
发布于 2011-03-08 04:52:39
您可能希望创建一个将关键字映射到REs的数据结构。但老实说,我会尝试将失败的REs作为第一优先级快速处理,并循环处理所有这些问题。
失败快速RE的一个例子是以"^Sometext“开头的RE,如果第一个字符与"S”不匹配,则不计算RE的其余部分。
https://stackoverflow.com/questions/5225053
复制相似问题