应用单一生产规则的产品的常见说法是什么?

What is common parlance for the product of applying a single production rule?

我想知道在解析过程中应用单个生产规则的结果是否有一个约定的名称?

假设我的语法有这样的产生式:

attr -> NAME, EQUAL, TEXT

然后在解析过程中我匹配了那个产生式并且有一小部分数据代表 substitution/match:

((NAME, 'foo'), (EQUAL, '='), (TEXT, 'bar'))

约定俗成的叫法是什么?我目前收集到的候选人是:

除了完全阐明解决方案域的强烈愿望之外,一个函数(可能 match(rule, tokens))采用生产规则和 returns 匹配的标记(and/or 解析非terminals) 需要一个名字来表示它 returns (或者至少它的调用者做的)。

无论如何,在我的例子中,下一步是使用这些值在抽象语法树 (AST) 中生成一个节点,但该节点是一个单独的对象,可能具有不同的形式和附加字段。

在解析和编译器术语方面具有更丰富经验的人是否知道适用于此的术语?

在自下而上的解析(例如,LALR)中,一个或多个产生式规则的部分识别是通过构建一个复杂的 FSA 来有效完成的,在该 FSA 中,状态基本上编码了哪些产生式可能与已经看到的相匹配直到某个特定时间输入中的点。词汇量:

  • 处理令牌并在匹配部分(多个)生产中取得单位进展的行为称为 shift(它是一个转换在 FSA 中,加上在解析堆栈中记录转换已经发生)

  • 到达(通过移动一次或多次)某些产生式的明显结束后,解析器将执行一个(或多个)reductions,每个of which signals of a production 的识别。每次对长度为 L 的特定产生式规则 R 进行归约,从解析堆栈中弹出 L 个条目,以确定归约后 FSA 的状态。解析器然后尝试在产生式左侧的标记上移动。

您似乎对命名准备好进行减少的状态感兴趣。我没有见过用于命名此状态的术语,但我会提名 reducible 作为一个合理的术语。

(在可归约状态的 LALR 解析器中实际发生的是下一个 [as yet unshifted] 输入标记,lookahead,根据 [state- specific] lookahead set for the production, 看看是否真的可以在一个 reduction 中使用这个 production。[实际上,这是在检查这个 production 在它所在的上下文中是否有效。]如果可以,那么一个 reduction发生;如果没有,则产生式实际上不适用并被忽略;在这种情况下,先行标记最好有一个有效的转变。