我正在嘗試使用Antlr v4生成一個簡單的自定義語法的詞法分析器和解析器。問題是,當我運行Antlr .jar實用程序時,它會生成Lexer文件,但不會生成解析器文件,因爲我認爲它應該。antlr生成詞法分析器但不解析器
簡單的語法
// Define a grammar called Hello
grammar Hello;
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
ANTLR的工具
這些說明,按照順序:https://github.com/antlr/antlr4/blob/master/doc/tool-options.md
。 Java工具可以從http://www.antlr.org/download/index.html
下載(我選擇了antlr-4.7-complete.jar
)。
讓我們產生的詞法和語法分析器:
實際輸出
- HelloLexer.js
- HelloLexer.tokens
所需的輸出
- HelloLexer.js
- HelloParser.js
- HelloListener.js
- HelloVisitor.js
我想解析器,因爲一旦我lexed的投入,我想解析並生成一棵樹,然後我可以遍歷,如本教程所示:
var input = "your text to parse here"
var chars = new antlr4.InputStream(input);
var lexer = new MyGrammarLexer.MyGrammarLexer(chars);
var tokens = new antlr4.CommonTokenStream(lexer);
var parser = new MyGrammarParser.MyGrammarParser(tokens);
//^[!] notice here how I don't have an analogous "HelloParser.js" to run my tokens through!
parser.buildParseTrees = true;
var tree = parser.MyStartRule();
如何獲取Antlr工具來生成我想要的HelloParser.js文件?現在它只生成Lexer,並且我遵循的教程(上面的鏈接)沒有關於我處於的情況的任何詳細信息。
難道你會把JavaScript與Java混淆嗎? – lumio
從表面上看,使用Java工具生成JavaScript可能看起來很奇怪,但根據[Antlr - 如何創建詞法分析器或解析器](https://github.com/antlr/antlr4/blob/master/doc /javascript-target.md#how-to-create-a-javascript-lexer-or-parser)在繼續閱讀輸入並最終使用其語法樹的下一步之前,我需要創建詞法分析器和分析器。 – ChiefOfGxBxL
你最終得到ANTLR的錯誤嗎?你的方法是完全正確的,所以我認爲可能會導致ANTLR中止這一代。作爲一個測試,嘗試一個不同的目標(例如C++)來查看JS目標是否存在導致問題的東西。 –