2017-01-03 8 views
0

私はlexer.g4でこのどのようにJavaのAntlr4がSTRING_LITERALを含むと貪欲ではない "?

"STRING_LITERAL"(, "STRING_LITERAL")? 

のような単純な文法をした、私は、しかし、この

STRING_LITERAL: '"'[a-zA-Z0-9!#$&.+-^_{}:\\\" ]+'"'; 

ようにそれをSTRING_LITERALを定義"abc"、 "\" cde \ "" Anltr4は、これらのSTRING_LITERALを2つのテキストの代わりに1つのテキストとして読み込みます。

2つのテキストの間にコンマ( "、"
List<TerminalNode> params = ctx.STRING_LITERAL(); // Only have 1 String element ("abc", "\"cde\"") 

STRING_LIERALの\ "でantr4を使用してカンマ(、)で分割すると、paramsに2つの要素(" abc "と" \ "cde \" ")が含まれます。

答えて

1

私はSTRINGレクサールールとして'"' ('\\"'|.)*? '"'を使用して、その後のparams定義内でこれを使用しています:

actionExpressions 
    : exp += expression (COMMA exp += expression)* 
    ; 

expressionがそうで整数、ブール値、文字列、IDとのようなものである可能性があります。 STRINGリテラル定義内で分割を統合しようとすべきではありません。文字列は単なる文字列です。

私のレクサールールで?非貪欲を「扱う」。

関連する問題