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

时间:2018-04-21 18:53:04

标签: java parsing compiler-construction context-free-grammar left-recursion

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

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

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

这个实现将使用Java,所以如果你能得到与java实现相对应的答案,那就会膨胀

  

program→stmt_list $$$

     

stmt_list→stmt stmt_list | ε

     

stmt→id​​ = expr |输入id | print expr

     

expr→term term_tail

     

term_tail→添加术语term_tail | ε

     

term→factor fact_tail

     

fact_tail→mult_op fact fact_tail | ε

     

factor→(expr)|号码| id

     

add_op→+ | -

     

mult_op→* | / | // | %

1 个答案:

答案 0 :(得分:3)

您应该首先阅读编译器 - 原理,技术和工具的语法分析章节,也称为龙书。
检查输出令牌的步骤如下:

  • 构建第一个关注设置。
  • 构建预测解析表
  • Chek在同一个表格单元格中进行多次制作(冲突)

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