我使用Java的Parboiled 库创建了一个 PEG。
我基于这个例子。
它工作正常,但现在我需要实际创建 AST。
我的问题是如何使用库来做到这一点?
在 Google 上浏览了一下并查看了 Github 上的示例后,我发现您打算使用 push、pop、swap 等来创建 AST,但我无法弄清楚如何使用我的解析器。我的解析器与 Java 解析器非常相似,如果您能帮助我了解它在 Java 解析器中的工作原理,我可以将其改编为我的解析器。
我使用Java的Parboiled 库创建了一个 PEG。
我基于这个例子。
它工作正常,但现在我需要实际创建 AST。
我的问题是如何使用库来做到这一点?
在 Google 上浏览了一下并查看了 Github 上的示例后,我发现您打算使用 push、pop、swap 等来创建 AST,但我无法弄清楚如何使用我的解析器。我的解析器与 Java 解析器非常相似,如果您能帮助我了解它在 Java 解析器中的工作原理,我可以将其改编为我的解析器。
基本上 PEG 解析器保留一个带有值的堆栈,您可以在匹配输入时推送和弹出值。您将在堆栈上推送值(AST 节点),当解析完成时,您会从解析器中获取 AST 的根节点。
查看https://github.com/sirthias/parboiled/blob/master/examples-java/src/main/java/org/parboiled/examples/calculators/CalculatorParser4.java作为示例如何使用 push 和 pop 。
还检查(非常好!) Parboiled 项目的文档。这是特定于 AST 创建的部分https://github.com/sirthias/parboiled/wiki/Working-with-the-Value-Stack