私はすでにある種の文法のパーサを持っているアプリケーションを持っています。もう1つ別の文法を追加する必要があります。複数のLex/Yaccパーサを同じアプリケーションに含めることは可能ですか?
複数の可能性がありますか?
もしそうなら、別のエントリーポイントはどうやって手に入りますか?
おかげ
デビッド・アラン・フィンチ
私はすでにある種の文法のパーサを持っているアプリケーションを持っています。もう1つ別の文法を追加する必要があります。複数のLex/Yaccパーサを同じアプリケーションに含めることは可能ですか?
複数の可能性がありますか?
もしそうなら、別のエントリーポイントはどうやって手に入りますか?
おかげ
デビッド・アラン・フィンチ
私はバイソンに--name-prefix
オプションを使用して、これにあなたができると思う、とFlexへ--prefix
オプション。
どちらの場合でも、生成された関数で使用されるデフォルトの "yy
"接頭辞を、あなたが選択した接頭辞で置き換えることができます。
はい、可能です。
yaccには-pフラグが必要です。デフォルトの "yy"ではなく、別の接頭辞を指定できます。
lexによって生成されたファイルは、外部で使用されるシンボルが1つしかありません:yylex。 -Dyylex = mySecondLexなどでコンパイルできます。
私はそれをチェックする必要がありますが、それは私が必要なものです。ありがとうございました。 –
あなたのyaccのバージョンにこのフラグがあることを願っています。さもなければ、あなたはバイソンに切り替えることができます、それは本当に違いはありません。 – Ingo
yytextなどのシンボル(yywrap?)も外部で使用されていませんか? –
GoldParserのようなより一般的なアプローチを使用することを検討してください。これにより、汎用エンジンを使用して文法から生成されたLALRとDFAを処理できます。
このようにして、同じアプリケーションで任意の数の異なる文法を使用できます。文法を変更しても新しいソースコードは作成されず、新しいテーブルファイル(埋め込みリソースなどに含めることができます)が作成されます。
私たちはmoでシステムを変更する立場にはいませんが、将来見ることができるかもしれません。ありがとうございました。 –
標準のlexとyaccにはこれができません。 FlexとBisonは、他の実装と同様に動作します。あなたはフレックスとバイソンを使用していないと(コメントで)言ったので、どのバージョンのlexとyacc はを使用していますか?
POSIXでは、 '-p接頭辞'( 'yy'の代わりに)でシンボル接頭辞の変更をサポートするためにyaccが必要です。興味深いことに、それはlexのためには必要ありません。実際には多くの人が字句解析ツールを手作業で書いていると思いますので、あまり重要ではありませんでした。 –
私はlexとyaccを使用していますが、これはフリーウェアのバージョンに変更するかどうかを知る上で参考になります。ありがとうございました –
ああ、あなたのタグでそれらを言及した... – Alnitak
真。もし彼らがそれを働かせる唯一の方法は、フレックスとバイソンを使用することです。私たちはそれらを使用するための変更を持っています。 –