2016-02-12 84 views
1

任何人都可以解釋或指向我的一個工作示例的ANTLR4 Javascript 訪客實施使用? ANTLR4 Javascript Target的文檔顯示瞭如何實現監聽器,但不是Visitor。如何設置和調用ANTLR4 Javascript訪問者

這個問題不是關於ANTLR語法,甚至是工具本身。我可以使用該工具來愉快地生成訪客JS文件。我只是不知道如何調用它。

+0

看看這可以幫助你:https://gist.github.com/anonymous/6b388afff93da12cbb2d – thur

回答

3

聽衆是你實施的東西,並由ANTLR步行者調用。你必須設置walker,給它你的分析樹,以及你的監聽器實現。

訪客只是你自稱的一類。您調用的函數與相關的AST節點相對應,並命名爲visitStatementvisitProgram。該名稱基於ANTLR語法分析程序規則,如果您給出了子規則名稱(使用#alternativeNameForThisSubrule語法),則該名稱基於您提供的名稱。但它會有visit前綴。

這就是絆倒我的原因,因爲我看到的例子非常巧妙地使用visit作爲實際使用功能的替代品。

無論哪種方式,使用Visitor是完全手動的。

var chars = new antlr4.InputStream(input) 
var lexer = new FancyLexer(chars) 
var tokens = new antlr4.CommonTokenStream(lexer) 
var parser = new FancyParser(tokens) 
parser.buildParseTrees = true 
var tree = parser.block() // 'block' is the start rule 
var visitor = new FancyVisitor() 
return visitor.visitBlock(tree) // 'visitBlock' since that was the start rule