8

ある種類の文法用のパーサーを既に持っているアプリケーションがあり、別の目的のために別の文法を追加する必要があります。

複数持つことは可能ですか?

もしそうなら、どうやって別のエントリポイントを取得しますか?

ありがとう

デビッド・アラン・フィンチ

4

4 に答える 4

11

--name-prefixこれは、Bison の--prefixオプションと Flexのオプションを使用することで実現できると思います。

どちらの場合でも、yy生成された関数で使用されるデフォルトの " " プレフィックスを、独自に選択したプレフィックスに置き換えることができます。

于 2009-04-08T13:36:54.767 に答える
2

はい、可能です。

yaccには-pフラグが必要です。このフラグでは、デフォルトの「yy」の代わりに別のプレフィックスを指定できます。

lexによって生成されたファイルには、外部で使用される1つのシンボルyylexのみが含まれます。たとえば、-Dyylex=mySecondLexを使用してコンパイルできます。

于 2009-04-08T13:39:20.487 に答える
1

直接的な答えではありませんが、汎用エンジンを使用して、文法から生成された LALR および DFA テーブルを処理できる、 GoldParserなどのより汎用的なアプローチの使用を検討することをお勧めします。

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

于 2009-04-08T13:47:47.797 に答える
1

標準の lex と yacc にはそれを行う方法がありません。他のいくつかの実装と同様に、Flex と Bison も同様です。(コメントで) flex と bison を使用していないとおっしゃいました、lex と yacc のどのバージョンを使用していますか?

于 2009-04-08T14:08:54.673 に答える