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

时间:2015-03-06 07:29:31

标签: parsing compiler-construction

我想知道在解析过程中是否存在应用单个生产规则的结果的传统名称?

所以说我的语法有这个作品:

attr -> NAME, EQUAL, TEXT

然后在解析过程中,我匹配该生产,并有一小部分代表替换/匹配的数据:

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

会议要求被召唤的是什么?我到目前为止收集的候选人是:

  • 生产 - 我不喜欢这个选项,因为尽管这些项目是"生产的"通过应用规则,' attr - > NAME,EQUAL,TEXT' bit已经对该术语提出合法要求。
  • 部分推导 - 我更喜欢单个单词,但这对我来说很有意义,因为整个解析结果是一个推导,这是一个" atom"或推导的步骤。
  • 替换 - 我有点喜欢这个,但似乎有点通用。

除了强烈要求完全阐明解决方案域之外,需要生成规则并返回匹配令牌(和/或已解析的非终端)的函数(可能是match(rule, tokens))需要一个名称来代替它返回(或至少是其调用者)。

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

在解析和编译器术语方面具有更广泛经验的人是否知道适合此的术语?

1 个答案:

答案 0 :(得分:3)

在自下而上解析(例如,LALR)中,通过构建复杂的FSA来有效地完成对一个或多个生产规则的部分的识别,其中状态实质上编码哪些产品可能与在某一点上看到的产品相匹配。输入。词汇:

  • 处理令牌并在匹配(多个)制作的一部分时使单位进度的行为被称为 shift (它是FSA中的过渡,加上录制转换发生的解析堆栈

  • 在某些生产的明显结束时(通过移动一次或多次)后,解析器将执行一个(或多个)减少,每个减少识别a生产。对于长度为L的特定生产规则R的每次减少,从解析堆栈中弹出L个条目,以确定减少后的FSA的状态。然后解析器尝试转移生产左侧的令牌。

您似乎对命名准备进行缩减的状态感兴趣。没有一个术语我曾经用过这个名字,但我会提名可缩小作为一个合理的术语。

(在可简化状态下LALR解析器中实际发生的情况是,下一个[尚未移位的]输入令牌, lookahead ,针对[特定于状态]的前瞻集进行检查生产,看看是否可以真正使用生产减少。[实际上,这是检查生产在其被发现的上下文中是有效的。]如果可以,那么减少发生;如果没有,然后生产实际上并不适用,并被忽略;在这种情况下最好是前瞻标记的有效转移。)