LR(1) 解析器 - 制作内联作品

LR(1) parser - Making inline productions

您将如何在 LR(1) 解析器中实现内联产生式?通过内联产品,我的意思是产品在那里,但仅用于解析——它不会在解析 tree/AST 中生成。我将如何实施?我有一个内联产生式列表,我试过这个:当有一个reduce动作时,如果我们要减少到的lhs不在inlines列表中,减少它并将父节点推到节点堆栈上;如果 lhs 在内联列表中,则不要弹出堆栈的子项。这不是很好。

这就是解析树抽象语法树之间的区别。如果我正确地解释了你所说的话,你希望你的 LR(1) 解析器执行解析,但随后将解析树以外的树还给你(具体来说,你需要一些规则语法分析器工作,但你不想在输出中看到它们)。

处理此问题的典型方法是让 LR(1) 解析器在执行归约时执行语义操作。一旦算法完成,这些操作将实际构建您希望获得的抽象语法树。然后,您可以让与内联产生式相关联的语义操作基本上是 "take the existing parse tree and don't do anything with it,",这对应于不让解析器为该产生式规则发出任何内容。对于其他确实需要生成部分语法树的产生式,你可以让语义动作根据产生式产生部分AST。