【发布时间】:2011-03-07 20:47:08
【问题描述】:
我正在为自定义语言编写一个 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()
...
同时,我不想将给定的行与所有可能的正则表达式匹配,因为那样会浪费。在不丢弃我之前写的所有内容的情况下,有没有一种优雅的方法可以解决这个问题并使其更高效和可读?
【问题讨论】:
-
你考虑过使用真实的parser吗?
-
这个解析器是干什么用的?你能详细说明你正在解析的文本/代码的复杂性吗?
-
@nmichaels:我想我需要进一步研究。谢谢! @Nicolas Buduroi:我正在解析字节码反汇编。
-
正则表达式不能计数,也不能解析像
x = (a + (a+b)*c)*d这样的嵌套结构。您可能想阅读一些有关语言理论的内容,以及常规语言在一般情况下的排名。
标签: python regex programming-languages parser-generator