你能用正则表达式来实现分流算法吗?

时间:2012-02-15 17:20:24

标签: regex algorithm

你能用正则表达式实现shunting yard algorithm吗?

2 个答案:

答案 0 :(得分:3)

我不这么认为。正则表达式只能匹配常规语言(参见Regular language),而中缀表达式是一种无上下文的语言(参见Context-free language)。例如,您无法将由正确匹配的括号组成的表达式与正则表达式匹配。

答案 1 :(得分:1)

我相信这已在这里得到解答:Can the shunting yard algorithm parse POSIX regular expressions?

  

我会说你问题的答案是"不,你不能   使用正则表达式实现分流码算法。"   这与您无法使用解析任意HTML的原因相同   常用表达。归结为此:

     

正则表达式没有堆栈。因为调车场   算法依赖于堆栈(在转换时推送和弹出操作数   从中缀到RPN),然后正则表达式没有   计算"电源"执行此任务。

     

这掩盖了许多细节,但是正常表达"是一种方式   定义常规语言。当你"使用"你是一个正则表达式   正在要求电脑说:"看一下正文并告诉我   这些字符串是否都是我的语言。语言   我用正则表达式定义的。"我指向this most excellent answer which you and everyone reading this should upvote   有关常规语言的更多信息。

     

所以现在你需要一些数学概念来增强"常规   语言"为了创造更强大的语言。如果你是   将调车场算法表征为模型的实现   计算能力,然后你可能会说算法会   被描述为context-free grammar(嘿,你知道什么,那   link使用表达式解析树作为示例。)push-down automata。有堆栈的东西。

     

如果您对自动机理论和复杂性不太熟悉   类,然后那些维基百科文章可能没那么有用   没有从头开始解释它们。

     

关键是,您可以使用正则表达式来帮助编写分流   码。但是正则表达式并不是很擅长做有操作的操作   任意深度,这个问题有。所以我不会花太多钱   这个问题的时间走在正则表达式大道上。