この質問はちょっと混乱するかもしれません。私はFlexを使ってBisonにトークンを渡しています。フレックスを2番目に長い正規表現にマッチさせる方法は?
Flexは最も長い正規表現にマッチし、そのトークンを渡します(このように動作します)が、そのトークンが文法では機能しない場合は、2番目に長い正規表現に一致し、そのトークン。
私はこの動作を作成する方法を考えるのに苦労しています。どうすればこのことが起こるのですか?明確にするために
は、例えば、私は2つのルールを持っていると言う:
"//" return TOKEN_1;
"///" return TOKEN_2;
は、(それがない)私はそれが最初TOKEN_2
に合格したい文字列"///"
を、与えられました。 TOKEN_2
がBisonで指定された文法に適合しない場合は、TOKEN_1
(これも有効です)を渡します。
この動作はどのようにして作成できますか?
私は大きなファイルを扱っていて、端末を備えたシステムを使用していないので、簡単な例を使ってチェックするのは難しいです。これはデフォルトの動作ではありませんか? –
特定のルールセット、または一般的なすべてのルールに対してこれを実行しますか?後者の場合、flexを使ってこれを達成した場合、私は驚くでしょう。 特定のルールセットの場合は、ルールをリファクタリングする必要があります。 – Kizaru
このトークン状況は、2つの異なるトークンに対してのみ発生します。基本的には、コメントを特定のタイプのコメントとして扱おうとしていますが、問題が発生した場合は、それを通常のコメントとして扱います。私のルールをこのようにリファクタリングするのは非常に難しく、このトークン・パッシング・メソッドを動作させることができれば、これははるかに簡単になると思います。 –