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 回答