【问题标题】:How can textual "logic" be represented in a data structure文本“逻辑”如何在数据结构中表示
【发布时间】:2015-12-10 14:16:50
【问题描述】:

给定字符串

{A} AND ({B} OR {C} OR ({D} AND {E}))

如何在数据结构中表示?

【问题讨论】:

    标签: data-structures language-agnostic lexical-analysis


    【解决方案1】:

    “自然”表示是一棵树。每个非叶节点都是一个运算符,其子节点是操作数。在您的示例中,您将有一个标记为“AND”的根节点,其中包含两个子节点。左边的孩子是{A},右边的孩子被标记为“OR”。这个“OR”有三个孩子,一个标记为 {B},一个标记为 {C},一个标记为“AND”。最后一个“AND”有两个孩子,{D} 和 {E}。

    如果您希望“OR”是二元运算符(而不是三元或 n 元),您可以让“OR”有两个孩子:一个是 {B},另一个是另一个“OR”,其孩子是 {C} 和 "AND"。

    【讨论】:

      【解决方案2】:

      这是一个电路。如果我要在面包板上用一些晶体管和 LED 连接这个方程,我会画出以下示意图:

                       A
                      /
      output-----[AND]      B
                      \    /
                       [OR]--C
                           \       D
                            \     /
                             [AND]
                                  \
                                   E
      

      巧合的是,这甚至可以构造为地图数组的简单地图。让我们使用 JSON 作为此数据的示例格式:

      {AND:[
          A,
          {OR:[
              B,
              C,
              {AND:[
                  D,
                  E
              ]}
           ]}
      ]}
      

      这基本上是一个图表。在这个例子中最简单的情况下,它是一棵树,但要注意:这只是这个例子的产物。一般来说,它是一个图表,因为您可以在结构中有循环(一个元素出现在多个地方)。

      这是一个不是整齐树的方程式示例:

      {A} OR ({B} AND (NOT {A}))
      

      这转化为:

                     A-------------.
                    /              |
      output----[OR]       [NOT]<--'
                    \     /
                     [AND]
                          \
                           B
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 2014-03-02
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多