7

最近、and のコピーを手に取りました。私は文法や言語の操作に関して洗練されているので、かつてandThe Definitive ANTLR 4 Referenceを使用して記述した DSL に取り組みたいと思っていました。一般的な考え方は、実行時に DSL を JavaScript に変換し、v8 によって実行されるトランスレータ(型安全性(1)の検証を含む) を作成することです。yaccbison

ANTLR は Java アプリケーションに組み込むために設計されましたが、ネイティブ C++ を使い続けたいと考えています。ANTLR 4は、C++ スタイルのラッパーを使用してインクルードできるC パーサー/レクサー(2)を作成できますか? そして、どうやってそうするのですか?


(1)この本には、私がテンプレートとして使用する良い例がいくつかあります。
(2)よくわかりませんが、ANTLR が C++ での出力をサポートしていないことをどこかで読んだと思いますが、そうですか?

4

4 に答える 4

8

ANTLR 3 C /C++ターゲットはほとんど使用できないことがわかりました。これには、Cでの例外の欠如を回避するための非常に多くのハックが含まれているため、専門家のみに推奨されています。Terrの呼びかけですが、ANTLR 4は、エンドユーザーから必要なハッカーを分離できない限り、ネイティブの例外なしにターゲット言語をサポートしないことを願っています。ANTLR 2 C++ターゲットはANTLR3よりもクリーンですが、ANTLR 2自体には、ライセンスが非常に乱雑になるなどの制限があります(商用製品での使用が困難になります)。

于 2013-03-07T23:17:56.860 に答える
3

ANTLR v3にはさまざまなターゲットがあり、特にJava(もちろん)、C、C#、JavaScript、Pythonがあります。完全なリストについては、http ://www.antlr.org/wiki/display/ANTLR3/Code+Generation+Targetsを参照してください。

ただし、ANTLR v4には、現時点ではJavaターゲットしかありません。

于 2013-02-16T18:50:36.190 に答える
3

それでも興味がある場合は、antlr のバージョン 4.7 には c++ ターゲットがあります。

于 2017-08-30T13:57:08.050 に答える
1

John G.への回答

  • ANTLR3 C ターゲットが非常にハッキングであることには同意します。20 年の C/C++ の専門家である私は、作者からの回答がなければ、その使用方法を推測することさえできませんでした。はい、アイデアは非常に優れていましたが、ドキュメントがなければ理解するのはほぼ不可能でした.

  • 例外を伴う主な問題には同意しません。ANTLR2 と C++ 実装の v2 の時点では、例外が存在していました...そして、例外を削除するとより高速になるという意見がありました。v3ではそれを試みましたが...

  • しかし、速度は良くなりませんでした。私たちは、Valentina データベース エンジンで ANTRL2 から ANTLR3 に切り替えることを望んでいました。v3 文法への書き直しに数か月を費やしましたが、スピードアップはゼロでした。ちょうどゼロ。そのため、現在までANTLRのv2を使用しています。

  • ANTLR の速度が各ルールに対して個別の機能を生成するという事実である場合、主な問題だと思います。はい、これはその強い側面であり、これはその弱い側面です。

v4 では Terrence が Lexer でステート マシンを使用する方法を考案しました。パーサーでもそれを取得できれば。理想的には、文法とリリース用のステートマシンを開発しながら、ANTLR が現在のように関数を生成できると思います。しかし、これは今のところ夢です。

于 2014-01-05T12:20:13.377 に答える