2 回答

TA贡献1853条经验 获得超6个赞
对于语法中的每个非终端,生成的解析器将具有与非终端同名的方法,该方法不带任何参数,并返回将给定的非终端解析为解析树的结果。这是您应该传递给的树。Walk
因此,由于您使用的语法定义了名为 的非终端,因此您可以调用来解析程序并返回适当的解析树。program
p.Program()

TA贡献1936条经验 获得超7个赞
查看文件中的函数。BaseECMAScriptListenerparser/ecmascript_base_listener.go
package main
import (
"./parser"
"fmt"
"github.com/antlr/antlr4/runtime/Go/antlr"
)
type echoListener struct {
*parser.BaseECMAScriptListener
}
// Example
func (s *echoListener) VisitTerminal(node antlr.TerminalNode) {
fmt.Printf("%v\n", node.GetText())
}
func Parse(program string) {
is := antlr.NewInputStream(program)
lexer := parser.NewECMAScriptLexer(is)
stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel)
p := parser.NewECMAScriptParser(stream)
antlr.ParseTreeWalkerDefault.Walk(&echoListener{}, p.Program())
}
func main() {
Parse("function test(a, b) { return a + b; }")
}
- 2 回答
- 0 关注
- 190 浏览
添加回答
举报