Parsing bison info doc-递归解析中的优先级

Parsing bison info doc-递归解析中的优先级,parsing,bison,operator-precedence,Parsing,Bison,Operator Precedence,在bison的info文档中,提到了规则从最后一个终端符号获取其前序。 贴在下面: 优先级声明的第一个效果是为声明的端子符号指定优先级。第二个效果是为某些规则指定优先级:每个规则从组件中提到的最后一个端子符号获得其优先级 例如,在下面的示例中,如果出现上述情况,解析将如何进行: nonterm1 : nonterm2 | nonterm1 term1 nonterm3 nonterm4 | nonterm1 term2 non

在bison的info文档中,提到了规则从最后一个终端符号获取其前序。 贴在下面:

优先级声明的第一个效果是为声明的端子符号指定优先级。第二个效果是为某些规则指定优先级:每个规则从组件中提到的最后一个端子符号获得其优先级

例如,在下面的示例中,如果出现上述情况,解析将如何进行:

nonterm1 : nonterm2
                 | nonterm1 term1 nonterm3 nonterm4
                 | nonterm1 term2 nonterm5 nonterm6
还有一个例子:

nonterm1 : nonterm2 nonterm3
                  | nonterm1 term1 nonterm2 nonterm3
                  | nonterm1 term2 nonterm2 nonterm3
考虑第一个例子。第一个解析器将使用
nonterm2
,然后对于
term1
规则,
nonterm1
将持有
nonterm2
值,
term2
的优先级高于
term1
,解析器必须将值传递给
term2
规则中的
nonterm1
,但如果我们向
term1
规则提供
priority,则该值无效,因为正如语句所示,最后一个终端标记给出了规则优先级。将
term2
规则中的
nonterm3-nonterm4
的值赋值给
nonterm1
,这是不可能的还是可能的

值用于术语或非术语,但不是规则中的部分符号集,或者是否可能


info doc是否表示最后一个终端符号是“最后一个,但只有一个”符号,如果它是终端的话?

默认情况下,产品的优先级是产品右侧最后一个终端的声明优先级,而不管后面有多少(或很少)个非终端

如果该终端没有声明的优先级,则生产也没有声明的优先级

在序言中使用
%left
%right
%preference
%nonassoc
声明声明优先级


优先级仅用于解决歧义。如果语法完全决定了解析操作,则不会参考优先级。

为了了解优先级在LR解析器中的工作方式,您需要首先了解LR解析算法。我严格按照要求回答了这个问题,但我认为根本的问题对于这个网站来说太广泛了。