我目前正在编写一种编程语言,大约9个月以来,我一直在使用手写的词法分析器和解析器。我现在要做的是将其转换为ANTLR解析器。 parser system of the compiler的结构大致如下:
currentParser
的帮助程序,可以执行reparse()
或skip(n tokens)
Parser
的特定子类解析(使用方法parse(ParserManager pm, Token token)
)push
new Parser
,或者从解析器堆栈弹出自身,这意味着下一个解析器堆栈将解析下一个令牌。ITypeList
之类的接口上构建的,它们也作为单个参数传递给解析器。一个示例Parser
子类是TypeParser
public TypeParser(ITyped typed) { ... }
或TypeListParser
:
public TypeListParser(ITypeList typeList) { ... }
这个简单的结构适用于每个单Parser
实现。有没有办法在ANTLR中使用这些接口?
答案 0 :(得分:1)
您的描述看起来像是Parser组合模式的变体。
将此类设计转换为ANTLR:
ANTLR4不会创建AST,因此您的AST节点可以完全回收,您只需要决定如何从语法中创建AST: