我目前正在尝试创建一个LL解析器。 但是我已经有了我的BNF语法,但是我必须在AST之前创建并且我有一些问题。
我在google上发现这个教程解释了很多关于构建AST的内容,否则他们不会解释如何知道我是否必须选择正确的分支或左分支。)
感谢' S
答案 0 :(得分:1)
AST是一种抽象语法树 - 它是一个树,它编码作为编译器输入提供的程序的逻辑结构。通常,编译器前端的工作是为输入程序构建一个AST,并使用有用的信息对其进行注释,然后优化器和代码生成器可以使用这些信息来生成输出程序。
通常,实际生成AST的编译器部分称为解析器。有许多不同类别的解析器,其中 LL 解析器是一个受欢迎的系列。 LL解析器通常可以手写,但它们通常使用编译器生成工具自动生成。
换句话说,关于AST和LL解析器之间区别的主要问题的答案是" LL解析器是一种解析器,解析器是生成AST的东西。 #34;
您的下一个问题是如何从BNF语法构建AST。通常,您不会为BNF语法本身构建AST。相反,语法将指导解析器的构造,然后解析器将构建AST。实际上构建解析器通常是标准编译器课程中涉及的主题。如果您有兴趣,I have a set of lecture slides available from the last time I taught a compilers class和讲座02,03和04涵盖语法分析以及如何设计和构建LL解析器。希望他们能帮助你朝着正确的方向前进!