私は現在、交差を行う方法を知っていることを除いて、2つの通常の言語の交差をテストするに似た問題を解決しようとしていますが、追加の要件があります。
私が使用する交差ロジックは、NFA を DFA に変換するための Dragon Book のアルゴリズムですが、同時に 2 つの NFA で実行されます。すべての DFA は NFA であるため (ただし、非決定性はほとんどありません)、必要に応じてこれを繰り返して交差を増やすことができます。
私の問題は、正規表現の 1 つに、新しい正規表現の一部としてさらに使用できるグループがあることです。具体的には:
bin/x86/a.out: obj/x86/.*\.o
obj/{[a-zA-Z0-9]+}/{.*}.o: src/\2.c
最初の行の最後に、x86 ターゲットのすべてのオブジェクトに一致する正規表現があります。2 行目には、ビルド行の可能性を指定する正規表現があります。これは、最初のグループを固定の "x86" に一致させ、2 番目のグループをその後に任意の文字列に一致させる必要があります。この例では、最初の一致はまだ使用されていませんが、取得できるはずです。マッチングが確実に終了するようにする (そして再帰ルールを許可する) ために、最初の正規表現から取得した情報を 2 番目の正規表現のマッチングに使用したいと考えています。ルールは、1 行目から 2 番目の正規表現を取得し、2 行目から最初の正規表現を取得して、2 つの交差 (交差の結果の DFA) が受け入れ状態であるかどうかを判断することによって選択されます。そうであれば、両方が解析できる文があり、したがってグループが取ることができるいくつかの値があります。
一般に、最初の正規表現から情報を抽出して、2 番目の正規表現のグループと照合することは可能ですか?
一般的でない場合、どのような種類の制限を追加する必要がありますか?