gpt4 book ai didi

parsing - 有没有办法在不使用语法引导翻译的情况下编写编译器前端?

转载 作者:行者123 更新时间:2023-12-02 17:52:04 25 4
gpt4 key购买 nike

我的问题和标题一样。我只是想知道是否有任何其他翻译技术来获取不依赖于将操作嵌入到解析器中的中间代码(也就是说,解析器将严格创建抽象语法树,它不会生成任何代码) 。感谢您的回答。

最佳答案

如果您一个解析器,那么解析器必须做的不仅仅是将输入流“识别”为该语言的有效实例。如果您希望编译器生成任何内容,则必须将某种操作附加到语言片段匹配的事件。从某种意义上说,它只能是“语法导向”;在解析阶段,您所拥有的只是语法。

从根本上来说,解析操作必须构建“更可编译”的程序表示。我只知道一些基本的方法:

  • 生成一组虚拟机指令
  • 构建一个抽象语法树以传递给编译器的其余部分
  • 构建代码的某种控制/数据流表示形式(例如“三元组”)

这些在抽象中实际上几乎是相同的,因为解析器生成的表示包含链接结构,其元素具有一些直接的语义解释。这些具有隐含语义的结构位是编译器的其余部分所关闭的。

现在,文本程序的表示。如果您决定将编译器实现为 Post 系统(一组字符串重写规则),则可以完全避免“解析”过程(某种程度上)。它们的形式是“如果您看到这个字符串,请将其替换为另一个字符串”。 Post 系统被证明具有图灵能力,因此从技术上讲,您可以使用一组足够聪明的字符串重写规则将源代码转换为表示目标程序的字符串。我认识的人没有人以这种方式构建真正的编译器;我确信,如果您足够努力,您可以找到一篇不起眼的技术论文来实现这一点。

有人可以合理地认为,按照 Post 系统的要求,匹配字符串是一种解析(例如,识别有趣的结构),让你回到原来的问题。

值得注意的是,程序转换系统(我在商业上构建了其中一个)通常使用编译器前端来构建 AST,然后应用 AST 树到树重写来实现其目的。它们之所以如此构建,是因为它们实际上是伪装的邮政系统;程序的任何 AST 都可以简单地转换为字符串(例如,S 表达式),并且树重写可以转换为等效的字符串重写。因此,树重写系统只是一个 Post 系统,但这使得它非常强大。当然,我们可以将这一功能与其他更传统的编译器方法结合起来,这就是我们对我们的产品所做的。这样就更方便了;您不必像邮政系统那样做所有事情。

关于parsing - 有没有办法在不使用语法引导翻译的情况下编写编译器前端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com