我为字符串变量声明编写了以下语法。字符串的定义与单引号之间的任何内容一样,但必须有一种方法可以通过使用$字母转义来将单引号添加到字符串值。
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'