2
文字列変数の宣言には次の文法を書いています。文字列は一重引用符間の何かのように定義されますが、文字列値に単一引用符を追加するには、$文字を使用してエスケープする方法が必要です。ANTLR lexerでの特殊文字の処理
grammar test;
options
{
language = Java;
}
tokens
{
VAR = 'VAR';
END_VAR = 'END_VAR';
}
var_declaration: VAR string_type_declaration END_VAR EOF;
string_type_declaration: identifier ':=' string;
identifier: ID;
string: STRING_VALUE;
STRING_VALUE: '\'' ('$\''|.)* '\'';
ID: LETTER+;
WSFULL:(' ') {$channel=HIDDEN;};
fragment LETTER: (('a'..'z') | ('A'..'Z'));
あなたはvar_declarationルールのため、このコードを実行しようとすると、この文法は、動作しません:
VAR A :='$12.2' END_VAR
私はMismatchedTokenExceptionを取得します。
しかし、このコードはstring_type_declarationルールの正常に動作します:
A :='$12.2'