【发布时间】: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 所说的,只有当您有非常规则的模式作为输入时,使用正则表达式才是明智的。如果不允许嵌套、递归等,则正则表达式可能适用于非递归的有限语法。但这仍然是一个挑战。