文本"逻辑"以数据结构表示

时间:2015-12-10 14:16:51

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

给出字符串

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

如何在数据结构中表示?

2 个答案:

答案 0 :(得分:1)

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

如果您希望“OR”成为二元运算符(而不是三元运算符或n元数),则可以将“OR”与两个子元素一起使用:一个是{B},另一个是另一个“OR”的子元素是{C}和“AND”。

答案 1 :(得分:1)

这是一个电路。如果我要在带有晶体管和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