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.html
(antlr-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();
Antlrツールで、必要なHelloParser.jsファイルを生成する方法を教えてください。現在のところ、レクサーだけが生成されており、私が従っているチュートリアル(上のリンク)には、現在の状況に関する詳細はありません。
JavaScriptをJavaと混同している可能性はありますか? – lumio
私は、Javaツールを使用してJavaScriptを生成すると、奇妙に見えるかもしれませんが、[Antlr - レクサーまたはパーサーを作成する方法](https://github.com/antlr/antlr4/blob/master/doc /javascript-target.md#howtoto-create-a-javascript-lexer-or-parser)入力を読み、最終的に構文木を使用する次のステップに進む前に、レクサーとパーサーを作成する必要があります。 – ChiefOfGxBxL
最終的にANTLRからエラーが発生しましたか?あなたのアプローチはまったく正しいので、ANTLRに世代を中止させる原因があるかもしれないと思います。テストとして、別のターゲット(C++など)を試して、JSターゲットでトラブルの原因となるものがあるかどうかを確認します。 –