2017-09-29 4 views
0

Ragelを文字列解析に使用するC++プロジェクトを継承しました。Ragelを使用してC++コードベースの文字列を解析する理由は何ですか?

私はこれが行われたのを初めて見ており、誰かがC++の代わりにRagelを使用して文字列を解析する理由を理解したいと思いますか?

+0

おそらく使用しやすいパーサージェネレータなので、 –

+1

基本的には、プレーンC++で独自の実装をローリングするのではなく、Ragelなどのライブラリを文字列解析に使用するメリットは何ですか? – gurka

+0

[Ragel intro](http://www.colm.net/open-source/ragel/)を読んだことがありますか?代わりに[flex](https://github.com/westes/flex)、[bison](https://www.gnu.org/software/bison/)、[ANTLR](http:// www。 antlr.org/) –

答えて

3

parser generators(不適切に「コンパイラコンパイラ」と呼ばれる)は、信頼性が高く効率的なC++コードやCコードを生成するのに非常にハンサムである(特にparsing理論がよく理解されているため)。

一般に、ソースコードジェネレータを使用するのは賢明なことです。時には、特に大きなプロジェクトでは、独自のものを書くことが賢明です(metaprogramming、特にSICP、さらにJ.Pitrat's blogを読んでください)。 build automationなどのツールGNU makeまたはninjaは、CまたはC++コードジェネレータを実行してビルド時に使用するように簡単に設定できます。

Ragelイントロを読んでください。 CまたはC++ジェネレータの一般的な例としてflex,bison,ANTLR,rpcgen,Qt moc,swig,gperfも見てください。

一部のプログラムでは、JIT compilationライブラリ(libgccjitまたはLLVMなど)を使用して、実行時に動的にコードを生成して使用することもできます。 POSIXシステムでは、実行時に一時的なCまたはC++ファイルを生成し、pluginとしてコンパイルし、dlopen & dlsymを使用してその一時的なプラグインをロードすることもできます。コンパイラやインタプリタ(例えば、Dragon Bookを介して)に関する良い文化を持つことは価値があります。

アプリケーションに(luaguileのような)いくつかのインタープリタを埋め込むことも興味深いアプローチです。しかし、これは強力なアーキテクチャ上の決定です。

多くの場合、ソースコードを生成することは、手書きよりも簡単です。もちろん、それは常に可能ではありません。

PS。私はあなたの質問を読む前にRagelについて聞いたことがありません!

関連する問題