2 回答

TA貢獻1851條經驗 獲得超3個贊
對于語法中的每個非終結符,生成的解析器將有一個與非終結符同名的方法,該方法不接受任何參數,并將給定非終結符的解析結果作為解析樹返回。那是你應該傳遞給的樹Walk
。
因此,由于您使用的語法定義了一個名為 的非終端program
,您可以調用p.Program()
來解析程序并取回適當的解析樹。

TA貢獻1824條經驗 獲得超5個贊
查看文件中的BaseECMAScriptListener函數parser/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 關注
- 199 瀏覽
添加回答
舉報