首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何改进我的解析技术?

如何改进我的解析技术?
EN

Stack Overflow用户
提问于 2011-03-08 04:47:08
回答 3查看 131关注 0票数 0

我正在为一种自定义语言编写pythonic解析器,到目前为止,我已经有了这样的东西:

代码语言:javascript
复制
re1 = re.compile(r"...")
re2 = re.compile(r"...")
re3 = re.compile(r"...")
re4 = re.compile(r"...")
...
...

现在我正在读取输入文件,对于每一行,如果我找到一个特定的关键字,那么我将使用一个特定的正则表达式。显然,这让我的生活变成了人间地狱,因为我正在做这样的事情:

代码语言:javascript
复制
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() 
...

同时,我不希望将给定的行与所有可能的正则表达式进行匹配,因为这将是一种浪费。在不丢弃我之前写的所有东西的情况下,有没有一种优雅的方法来解决这个问题,使它更有效率和可读性?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-08 04:50:56

您可以查看Python可用的many parser libraries之一,而不是使用滚动自己的解析器。

  • PLY
  • pyparsing
  • ANTLR
  • etc...
票数 3
EN

Stack Overflow用户

发布于 2011-03-08 04:51:07

我不认为这是您正在寻找的答案,但我认为您会更好地使用实际的词法分析器和Tokenizer来解析您的语言。我建议研究并学习使用PLY来完成这类任务。

票数 2
EN

Stack Overflow用户

发布于 2011-03-08 04:52:39

您可能希望创建一个将关键字映射到REs的数据结构。但老实说,我会尝试将失败的REs作为第一优先级快速处理,并循环处理所有这些问题。

失败快速RE的一个例子是以"^Sometext“开头的RE,如果第一个字符与"S”不匹配,则不计算RE的其余部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5225053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档