创建解析树以确定给定的 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 → * | / | // | %
你应该从阅读编译器-原理、技术和工具的语法分析章节开始,也就是龙书。
检查输出标记的步骤是:
构建 First 和 Follow 集合。
构建 预测解析 table。
检查同一 table 单元格中的多个作品(冲突)
所有这些步骤都可以在龙书上找到,并用各自的算法进行了完美的解释。
我希望这有帮助。
这实际上只是解析之前的一个步骤,所以如果你到了能够检查语法是否为 LL(1) 的地步,我建议实现解析算法,即只是有一个堆栈,你可以在其中推送非终端并引用 table 来生成 AST。
我有一个程序,当前将生成令牌输出,用于下一个程序的输入。它将检查代码语法的正确性。
我 运行 遇到了如何开始将此语法转换为可用程序的问题。
下面是语法用法,我要怎么着手做呢。或者哪里有好的资源可以帮助我学习创建自己的解析器的基础知识。
此实现将使用 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 → * | / | // | %
你应该从阅读编译器-原理、技术和工具的语法分析章节开始,也就是龙书。
检查输出标记的步骤是:
所有这些步骤都可以在龙书上找到,并用各自的算法进行了完美的解释。
我希望这有帮助。 这实际上只是解析之前的一个步骤,所以如果你到了能够检查语法是否为 LL(1) 的地步,我建议实现解析算法,即只是有一个堆栈,你可以在其中推送非终端并引用 table 来生成 AST。