我目前正在嘗試在Antlr4訪問者的幫助下開發JavaScript編譯器。我已經用Java實現了這一點,但無法弄清楚如何在JavaScript中執行此操作。可能有人可以回答我幾個問題?Antlr4 Javascript訪客
1:在Java中有一個Visitor.visit函數。如果我正確的話,這是不可能的Javascript。有沒有解決這個問題的方法?
2:我的JavaScript訪問者獲得了所有生成的訪問函數,但是當我使用console.log(ctx)時,上下文未定義。任何想法爲什麼?從SimpleVisitor.js
提取物:
// Visit a parse tree produced by SimpleParser#parse.
SimpleVisitor.prototype.visitParse = function(ctx) {
console.log(ctx);
};
主要js文件:
var antlr4 = require('lib/antlr4/index');
var SimpleLexer = require('antlr4/SimpleLexer');
var SimpleParser = require('antlr4/SimpleParser');
var SimpleVisitor = require('antlr4/SimpleVisitor');
var input = "double hallo = 1;";
var chars = new antlr4.InputStream(input);
var lexer = new SimpleLexer.SimpleLexer(chars);
var tokens = new antlr4.CommonTokenStream(lexer);
var parser = new SimpleParser.SimpleParser(tokens);
var visitor = new SimpleVisitor.SimpleVisitor();
parser.buildParseTrees = true;
var tree = parser.parse();
visitor.visitParse();
這大概是足以開始...
布魯諾
編輯:
可能上下文是未定義的,因爲我沒有參數調用該函數,但我在哪裏可以獲得「開始」-context?
EDIT2:
所以我覺得我的想法這應該如何工作的。還有一個問題我如何確定在每個訪問者函數內接下來調用哪個規則?
不知道,但也許你可以在antlr討論谷歌組獲得答案。不要忘記添加您的語法文件和您開發的一些訪客代碼。 – erosb
你是對的,在Java中它使用方法重載。由於在JavaScript中不可行,因此會生成'visitXXX',其中XXX是規則名稱。你仍然有一個每個規則的函數,它是區分它們的名字,而不是它們的參數類型。順便說一下,你也可以顯示一些代碼。 – Katona
找到解決方案如果有人感興趣,他可以給我寫信息 – Bruno