Parsing {LL parser}一个集合表达式有多少个AST

Parsing {LL parser}一个集合表达式有多少个AST,parsing,abstract-syntax-tree,ll,Parsing,Abstract Syntax Tree,Ll,我正在尝试实现一个LL解析器。 但是我想知道,对于一个集合表达式,是否有可能得到许多AST。 例如: -对于像(a+b)*(c-d)/(e+f)这样的表达式 对于LL解析器,唯一可能获得的AST是: [/] / \ / \ [*] [+]

我正在尝试实现一个LL解析器。 但是我想知道,对于一个集合表达式,是否有可能得到许多AST。 例如: -对于像(a+b)*(c-d)/(e+f)这样的表达式 对于LL解析器,唯一可能获得的AST是:

                              [/]
                             /   \
                            /     \
                         [*]       [+]
                        /   \      / \
                       /     \    /   \
                     [+]     [-] [e]  [f]
                    / \      / \
                   /   \    /   \
                 [a]   [b] [c]  [d]
或者有没有另一种可能?顺便问一下,我怎么知道我的AST是否正确? 希望我能理解!:)
如果我没有,请不要犹豫,我会尝试用另一种方式解释我的问题,谢谢,因为“抽象语法树”(AST)没有精确的定义。给定应用程序生成的AST是语法树的抽象,可能包含或排除与该应用程序相关的任何数据

基本上,AST是您希望从给定输入生成的任何内容。通常,您希望删除无关的细节(在您的示例中,包括括号和从
表达式
派生的
标识符),但情况并非总是如此:例如,在某些语言中,括号在语义上很重要,需要保留

如果语法为LL(1),则每个输入最多必须有一个有效的解析。或者,换句话说,每个有效的输入都必须有一个有效的解析。或者更准确地说,每个有效输入必须正好有一个

从任何派生,您都可以创建一个语法树,它表示整个 解析,包括您可能希望忽略的无关细节。如果存在唯一的最左端派生,则只有可能的语法树


通常,这意味着给定的AST也是确定的(假设解析器是确定的,没有错误),但由于同一语言的两个不同解析器可能具有完全不同的语法树抽象,因此无法说所有解析器都将生成相同的AST。

没有精确的语法树抽象定义“抽象语法树”(AST)。给定应用程序生成的AST是语法树的抽象,可能包含或排除与该应用程序相关的任何数据

基本上,AST是您希望从给定输入生成的任何内容。通常,您希望删除无关的详细信息(在您的示例中,这将包括括号和从
表达式
派生的
标识符
),但情况并非总是如此:例如,在某些语言中,括号在语义上很重要,需要保留

如果语法为LL(1),则每个输入最多必须有一个有效解析。或者,换句话说,每个有效输入必须有一个有效解析。或者更准确地说,每个有效输入必须有一个有效解析

从任何派生,您都可以创建一个语法树,它表示整个 解析,包括您可能希望忽略的无关细节。如果存在唯一的最左侧派生,则只有可能的语法树


通常,这意味着给定的AST也是确定的(假设解析器是确定的而不是错误的),但由于同一语言的两个不同解析器可能具有完全不同的语法树抽象,因此无法说所有解析器将生成相同的AST。

如果没有AST的精确定义,那么我假设没有精确的方法浏览AST?既然现在有精确的方法浏览和构造AST,我应该吗根据生成的方式浏览AST?或者我应该根据我想浏览的方式创建AST吗?谢谢如果AST没有精确的定义。所以我想没有精确的方式浏览AST?既然现在有精确的方式浏览和构造AST。我应该根据生成的方式浏览AST吗?还是应该我创建了一个AST根据我想如何浏览它?谢谢