2017-07-15 6 views
1

Antlr v4を使用して、単純なカスタム文法のためのレクサーとパーサーを生成しようとしています。問題は、Antlr .jarユーティリティを実行すると、Lexerファイルが生成されますが、Parserファイルは生成されないということです。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.htmlantlr-4.7-complete.jarを選択)からダウンロードできます。

のは、レクサーとパーサを生成してみましょう:

実際の出力

  • HelloLexer.js
  • HelloLexer.tokens

所望の出力

  • HelloLexer.js
  • HelloParser.js
  • 私が入力をレクサー処理したら、私がしたいので、私はパーサを希望HelloListener.js
  • HelloVisitor.js

このチュートリアルで示すように、ツリーを解析してトラバースできるツリーを生成します。

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ファイルを生成する方法を教えてください。現在のところ、レクサーだけが生成されており、私が従っているチュートリアル(上のリンク)には、現在の状況に関する詳細はありません。

+0

JavaScriptをJavaと混同している可能性はありますか? – lumio

+0

私は、Javaツールを使用してJavaScriptを生成すると、奇妙に見えるかもしれませんが、[Antlr - レクサーまたはパーサーを作成する方法](https://github.com/antlr/antlr4/blob/master/doc /javascript-target.md#howtoto-create-a-javascript-lexer-or-parser)入力を読み、最終的に構文木を使用する次のステップに進む前に、レクサーとパーサーを作成する必要があります。 – ChiefOfGxBxL

+0

最終的にANTLRからエラーが発生しましたか?あなたのアプローチはまったく正しいので、ANTLRに世代を中止させる原因があるかもしれないと思います。テストとして、別のターゲット(C++など)を試して、JSターゲットでトラブルの原因となるものがあるかどうかを確認します。 –

答えて

1

Antlrツールを再試行して問題を解決しました.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ツールが自動的に失敗するという問題があります。警告やエラーがなければ、エラーを診断することは困難でした。

関連する問題