2009-04-08 9 views

答えて

8

私はバイソンに--name-prefixオプションを使用して、これにあなたができると思う、とFlexへ--prefixオプション。

どちらの場合でも、生成された関数で使用されるデフォルトの "yy"接頭辞を、あなたが選択した接頭辞で置き換えることができます。

+0

私はlexとyaccを使用していますが、これはフリーウェアのバージョンに変更するかどうかを知る上で参考になります。ありがとうございました –

+0

ああ、あなたのタグでそれらを言及した... – Alnitak

+0

真。もし彼らがそれを働かせる唯一の方法は、フレックスとバイソンを使用することです。私たちはそれらを使用するための変更を持っています。 –

2

はい、可能です。

yaccには-pフラグが必要です。デフォルトの "yy"ではなく、別の接頭辞を指定できます。

lexによって生成されたファイルは、外部で使用されるシンボルが1つしかありません:yylex。 -Dyylex = mySecondLexなどでコンパイルできます。

+0

私はそれをチェックする必要がありますが、それは私が必要なものです。ありがとうございました。 –

+0

あなたのyaccのバージョンにこのフラグがあることを願っています。さもなければ、あなたはバイソンに切り替えることができます、それは本当に違いはありません。 – Ingo

+0

yytextなどのシンボル(yywrap?)も外部で使用されていませんか? –

1

GoldParserのようなより一般的なアプローチを使用することを検討してください。これにより、汎用エンジンを使用して文法から生成されたLALRとDFAを処理できます。

このようにして、同じアプリケーションで任意の数の異なる文法を使用できます。文法を変更しても新しいソースコードは作成されず、新しいテーブルファイル(埋め込みリソースなどに含めることができます)が作成されます。

+0

私たちはmoでシステムを変更する立場にはいませんが、将来見ることができるかもしれません。ありがとうございました。 –

1

標準のlexとyaccにはこれができません。 FlexとBisonは、他の実装と同様に動作します。あなたはフレックスとバイソンを使用していないと(コメントで)言ったので、どのバージョンのlexとyacc を使用していますか?

+0

POSIXでは、 '-p接頭辞'( 'yy'の代わりに)でシンボル接頭辞の変更をサポートするためにyaccが必要です。興味深いことに、それはlexのためには必要ありません。実際には多くの人が字句解析ツールを手作業で書いていると思いますので、あまり重要ではありませんでした。 –

関連する問題