0

私のAntlr3文法では、次のレクサールールを使用して、「1YEAR4MONTHS」などの一定の日付期間を認識しました。

(DATE_PERIOD_CONSTANT)=> DATE_PERIOD_CONSTANT ((' '+ DATE_PERIOD_CONSTANT)=> ' '+ DATE_PERIOD_CONSTANT)*

(クレジットが必要なクレジット、それはバート・キアーズから来ました)。

残念ながら、その構文はANTLR4ではなくなりました。だから、私は次のことを試みましたが失敗しました:

DATE_PERIOD_CONSTANT
: (INTEGER ' '+ (YEAR | MONTH | WEEK | DAY))+
| {getText().matches("(\\d+ (YEAR(S)?|MONTH(S)?|WEEK(S)?|DAY(S)?))+")}? INTEGER
;

INTEGER
    : DIGIT+
    ;

 fragment DIGIT:'0'..'9';

// YEAR/MONTH/WEEK/DAY definition

それも失敗しました。

誰かが私が新しいフォーマットに翻訳するのを手伝ってもらえますか?

ジェイソン

4

1 に答える 1

2

サンプルのレクサー ルールでは、セマンティック述語ではなく、構文述語を使用しています。ANTLR 4 では、先読み機能が大幅に改善されているため、これらは不要です。あなたがしなければならないのは、それらを削除することだけです:

DATE_PERIOD_CONSTANT (' '+ DATE_PERIOD_CONSTANT)*
于 2013-03-14T18:47:51.307 に答える