Data structures “文本”怎么可能;“逻辑”;可以在数据结构中表示

Data structures “文本”怎么可能;“逻辑”;可以在数据结构中表示,data-structures,language-agnostic,lexical-analysis,Data Structures,Language Agnostic,Lexical Analysis,给定字符串 {A} AND ({B} OR {C} OR ({D} AND {E})) 如何在数据结构中表示这一点?自然的表示是树。每个非叶节点都是一个运算符,其子节点是操作数。在您的示例中,您将有一个标有“AND”的根节点和两个子节点。左边的子项是{A},右边的子项标记为“或”。这个“OR”有三个子元素,一个标记为{B},一个标记为{C},一个标记为“and”。最后一个“AND”有两个孩子,{D}和{E} 如果你希望“或”是一个二元运算符(而不是三元运算符或n元运算符),你可以用“或”和两个

给定字符串

{A} AND ({B} OR {C} OR ({D} AND {E}))
如何在数据结构中表示这一点?

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


如果你希望“或”是一个二元运算符(而不是三元运算符或n元运算符),你可以用“或”和两个子运算符:一个是{B},另一个是“或”的子运算符是{C},另一个是“和”。

这是一个电路。如果我用一些晶体管和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
A-------。
/              |
输出----[或][非]