Java 创建解析树以确定给定LL语法的正确性

Java 创建解析树以确定给定LL语法的正确性,java,parsing,compiler-construction,context-free-grammar,left-recursion,Java,Parsing,Compiler Construction,Context Free Grammar,Left Recursion,我有一个程序,目前将生成令牌的输出,用于下一个程序的输入。它将检查代码语法的正确性 我遇到了关于如何开始将该语法转换为可用程序的问题 下面是语法用法,我将如何开始做这个。或者哪里有好的资源来帮助我学习创建自己的解析器的基础知识 这个实现将使用Java,所以如果您可以得到对应于Java实现的答案,那就太棒了 节目→ stmt_列表$$$ stmt_列表→ stmt stmt|u列表|ε stmt→ id=expr |输入id |打印expr expr→ 术语尾 术语尾→ 加上op项|尾|ε 术语→

我有一个程序,目前将生成令牌的输出,用于下一个程序的输入。它将检查代码语法的正确性

我遇到了关于如何开始将该语法转换为可用程序的问题

下面是语法用法,我将如何开始做这个。或者哪里有好的资源来帮助我学习创建自己的解析器的基础知识

这个实现将使用Java,所以如果您可以得到对应于Java实现的答案,那就太棒了

节目→ stmt_列表$$$

stmt_列表→ stmt stmt|u列表|ε

stmt→ id=expr |输入id |打印expr

expr→ 术语尾

术语尾→ 加上op项|尾|ε

术语→ 因子事实尾

事实真相→ 多个事实尾部|ε

因素→ (expr)|编号| id

加上→ + | -

木偶→ * | / | // | %


您应该先阅读编译器-原则、技术和工具的语法分析一章,也称为龙书。
检查输出令牌的步骤如下:
  • 先建立集合然后建立集合
  • 构造预测解析表
  • 检查同一表格单元格中的多个产品(冲突)

  • 所有这些步骤都可以在龙书中找到,并用各自的算法进行了完美的解释。
    我希望这有帮助。
    这实际上只是解析之前的一个步骤,因此如果您能够检查语法是否为LL(1),我建议实现解析算法,它只是有一个堆栈,您可以在其中推送非终端并参考表来生成AST

    谢谢,这帮助我朝着正确的方向完成了这项任务