私は、パフォーマンス上の理由から、C#ライブラリをC++に移植しています。通常の操作では、このライブラリは、とりわけ、平均長が150文字未満の約150,000の数式(Excelの数式を考えてください)を解析する必要があります。
C#バージョンでは、GOLDパーサーを使用して解析コードを生成しました。1秒以内にすべての150,000式を解析できます。
言語の拡張を考えていたので、C++への移行はANTLRに変更する良いチャンスかもしれないと思いました。(単純な)文法をANTLRに移植し、そこからCコードを生成しました。150,000の式の解析には、12秒以上かかります。これは、式ごとに、新しいANTL3_INPUT_STREAM、トークンストリーム、レクサー、およびパーサーを作成する必要があるためです。少なくともバージョン3.4では、それらを再利用する方法はありません。
誰かが代わりに何を使用するかを私に勧めてくれるとありがたいです-C++またはCコードの生成はC#の種類よりもはるかに複雑に見えますが、GOLDはもちろんオプションです。私の文法はLALRとLL(1)と互換性があります。最も重要な懸念は、小さな入力でのパフォーマンスの解析です。