0

私は使用してJFlexいますが、次のようなものと一致させたいです:

|MATCHED|NOTMACHED|
|NOTMACHED|NOTMACHED|NOTMACHED|
<newline>
|MATCHED|NOTMACHED|
|NOTMACHED|NOTMACHED|NOTMACHED|

私のパターン:

 FIXTURE_NAME_PATTERN=[^\|]\n\|[A-Za-z]+\|


 <YYINITIAL> {FIXTURE_NAME}
  { yybegin(YYINITIAL); return FitnesseTypes.FIXTURE_NAME; }

|しかし、それは前の行 (空白) だけでなくパイプ " " にも一致します。キャプチャを使用しようとしましたが、これを機能させることができません。助言がありますか ?

4

1 に答える 1

0

状態を使用する必要があります。次のような状態を定義します。

%state AFTER_NEWLINE

あなたの状態定義で。

次に、字句定義では、次のようになります。

<YYINITIAL>\n
{ yybegin(AFTER_NEWLINE); }

<AFTER_NEWLINE>|
{ /*Do whatever you want with pipes*/ }

<AFTER_NEWLINE>[A-Za-z]
{ yybegin(YYINITIAL); return FitnesseTypes.FIXTURE_NAME; }

//Any other lexical definitions you might need

これが基本的に行うことは、新しい行がヒットするたびに、状態を AFTER_NEWLINE に設定することです。次に、一連の文字が連続して表示されたときに一致し、状態を YYINITIAL に戻します。パイプは捨てます。

于 2014-02-19T02:29:00.227 に答える