【问题标题】:parse code with reqular expressions使用正则表达式解析代码
【发布时间】:2014-04-16 07:08:47
【问题描述】:

我尝试实现一个解析器,应该找到以下语句

if @loglevel < 1 or
   @loglevel > 3
begin
   dothis
   dothat
end
else
   foo
   makethis
end

解析器应该使用正则表达式并且应该返回

条件部分 (=> @loglevel 3)

然后部分 (=> begin dothis dothat end 之间的一切)

其他部分 (=> else begin ....end)

当然应该有可能代码不包含else部分

是否可以使用一个或多个 reqex 的表达式来做到这一点,或者我应该实现一个 sequenciell“readline 解析器”

【问题讨论】:

  • 做一个顺序解析器。对非平凡语法使用正则表达式是自找麻烦。主要原因是(假定的)嵌套语句的可能性。
  • 补充 Amadan 所说的,只有当您有非常规则的模式作为输入时,使用正则表达式才是明智的。如果不允许嵌套、递归等,则正则表达式可能适用于非递归的有限语法。但这仍然是一个挑战。

标签: regex parsing


【解决方案1】:

cmets 是正确的,你不应该使用正则表达式进行解析,here 是一篇描述为什么这是一个坏主意的文章。

您可以查看ANTLR 以获取有关您的解析器的帮助。这里有个问题with some info

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多