你能用正则表达式实现shunting yard algorithm吗?
答案 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。有堆栈的东西。
如果您对自动机理论和复杂性不太熟悉 类,然后那些维基百科文章可能没那么有用 没有从头开始解释它们。
关键是,您可以使用正则表达式来帮助编写分流 码。但是正则表达式并不是很擅长做有操作的操作 任意深度,这个问题有。所以我不会花太多钱 这个问题的时间走在正则表达式大道上。