如何改进我的解析技巧?

时间:2011-03-07 20:47:08

标签: python regex programming-languages parser-generator

我正在为自定义语言编写一个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() 
...

同时,我不希望将给定的行与所有可能的正则表达式匹配,因为这将是一种浪费。在不抛弃我写到的所有内容之前,是否有一种优雅的方法来解决这个问题并使其更有效和可读?

3 个答案:

答案 0 :(得分:3)

不是使用你自己编译你自己的解析器,而是可以查看一个可用于Python的many parser libraries

答案 1 :(得分:2)

我认为这不是您正在寻找的答案,但我认为您可以更好地使用实际的Lexer和Tokenizer来解析您的语言。我建议查看并学习使用PLY来完成这项任务。

答案 2 :(得分:1)

您可能想要将地图关键字创建数据结构到RE。但老实说,我会尝试将快速失败的RE作为第一优先级,然后将它们全部循环。

快速失败RE的示例将是以“^ Sometext”开头的示例,就好像第一个字符与“S”不匹配,然后RE的其余部分不被评估。