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

Creating parse tree to determine correctness of the LL Grammar given

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

我 运行 遇到了如何开始将此语法转换为可用程序的问题。

下面是语法用法,我要怎么着手做呢。或者哪里有好的资源可以帮助我学习创建自己的解析器的基础知识。

此实现将使用 Java,因此如果您能得到与 java 的实现相对应的答案,那就太棒了

program → stmt_list $$$

stmt_list → stmt stmt_list | ε

stmt → id = expr | input id | print expr

expr → term term_tail

term_tail → add op term term_tail | ε

term → factor fact_tail

fact_tail → mult_op fact fact_tail | ε

factor → ( expr ) | number | id

add_op → + | -

mult_op → * | / | // | %

你应该从阅读编译器-原理、技术和工具的语法分析章节开始,也就是龙书。
检查输出标记的步骤是:

  • 构建 FirstFollow 集合。
  • 构建 预测解析 table
  • 检查同一 table 单元格中的多个作品(冲突)

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