“?-6ren">
gpt4 book ai didi

ternary-operator - 扩展调车场算法以支持条件三元运算符

转载 作者:行者123 更新时间:2023-12-04 08:30:32 24 4
gpt4 key购买 nike

如何扩展原本用于二元运算符以支持条件三元运算符 ("a ? b : c") 的调车场算法?我在这里没有看到这个问题的答案,但我有一个,所以我发布了它。

最佳答案

我的做法是添加三个新的运算符:

  • >“?”三元开if
  • “:”三元其他
  • 三元闭if

读取初始表达式时只会直接创建前两个。
但是,输出中只会存在第三个(初始表达式的RPN)。
每当出现“?”时,三元开式 if 就会被放入运算符堆栈中。被看见了。
三元 else 永远不会放在堆栈上。相反,堆栈被弹出直到找到一个三元打开的 if,然后三元打开的 if 被替换为三元关闭的 if(因此表明我们在条件运算符的 else 部分)。< br/>所有三个运算符的优先级都高于所有其他运算符(更高意味着它们在其他运算符之后计算)。
三元-if 运算符具有相同的优先级和正确的结合性(就像在 C 中一样),这意味着一个三元-if 永远不会导致另一个三元-if 的弹出。
三元 else 的优先级高于三元 ifs,并且它的结合性无关紧要(因为它永远不会被放入堆栈)。所以,当遇到一个三元-open-if 时,它会将它转换为一个封闭的,如前所述。
当遇到一个三元-closed-if 时,它会弹出它。

示例(三元封闭-if 表示为“?:”):

  • “a ? b : c” -->
    “a b c ?:”
  • “a ? b : x ? y : z” -->
    “a b x y z ?: ?:”
  • “a ? x ? y : z : b” -->
    “a x y z ?: b ?:”

这种方法解释起来比实现起来更难,而且它确实对算法做了细微的改动,所以如果有人有更简单的解决方案,请发布。

关于ternary-operator - 扩展调车场算法以支持条件三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35609168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com