2017-07-15 132 views
1

我正在嘗試使用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(); 

https://github.com/antlr/antlr4/blob/master/doc/javascript-target.md#how-do-i-run-the-generated-lexer-andor-parser

如何獲取Antlr工具來生成我想要的HelloParser.js文件?現在它只生成Lexer,並且我遵循的教程(上面的鏈接)沒有關於我處於的情況的任何詳細信息。

+0

難道你會把JavaScript與Java混淆嗎? – lumio

+0

從表面上看,使用Java工具生成JavaScript可能看起來很奇怪,但根據[Antlr - 如何創建詞法分析器或解析器](https://github.com/antlr/antlr4/blob/master/doc /javascript-target.md#how-to-create-a-javascript-lexer-or-parser)在繼續閱讀輸入並最終使用其語法樹的下一步之前,我需要創建詞法分析器和分析器。 – ChiefOfGxBxL

+0

你最終得到ANTLR的錯誤嗎?你的方法是完全正確的,所以我認爲可能會導致ANTLR中止這一代。作爲一個測試,嘗試一個不同的目標(例如C++)來查看JS目標是否存在導致問題的東西。 –

回答

1

該問題已通過重新嘗試Antlr工具(Java/.jar),但是在Windows上設置爲CLASSPATH的設置是正確的。

Getting started for Windows文檔後,必須將CLASSPATH環境變量設置爲包含Jar文件的路徑。我原來是用System Properties > Environment Variables這個窗口做的,但由於某種原因,它沒有被註冊(我重新檢查了錯別字,但仍然沒有發現問題)。

下一次我手動運行命令SET CLASSPATH=.;C:\Javalib\antlr-4.5.3-complete.jar;%CLASSPATH%,現在正在生成詞法分析器解析器。

所以問題是,如果CLASSPATH設置不正確,Java工具會以靜默方式失敗。沒有任何警告或錯誤,很難診斷錯誤。

相關問題