my.greeting = "hello ${your.name}"
は私が得るエラーは以下のとおりです。
line 1:31 token recognition error at: 'e'
line 1:34 no viable alternative at input '<EOF>'
MyParser。 g4:
parser grammar MyParser;
options { tokenVocab=MyLexer; }
program: variable EQ expression EOF;
expression: (string | variable);
variable: (VAR DOT)? VAR;
string: (STRING_SEGMENT_END expression)* STRING_END;
MyLexer.g4:罰金以下のような作業
lexer grammar MyLexer;
START_STR: '"' -> more, pushMode(STRING_MODE) ;
VAR: (UPPERCASE|LOWERCASE) ANY_CHAR*;
EQ: '=';
DOT: '.';
WHITE_SPACE: (SPACE | NEW_LINE | TAB)+ -> skip;
fragment DIGIT: '0'..'9';
fragment LOWERCASE: 'a'..'z';
fragment UPPERCASE: 'A'..'Z';
fragment ANY_CHAR: LOWERCASE | UPPERCASE | DIGIT;
fragment NEW_LINE: '\n' | '\r' | '\r\n';
fragment SPACE: ' ';
fragment TAB: '\t';
mode INTERPOLATION_MODE;
STRING_SEGMENT_START: '}' -> more, popMode;
mode STRING_MODE;
STRING_END: '"' -> popMode;
STRING_SEGMENT_END: '${' -> pushMode(INTERPOLATION_MODE);
TEXT : ~["$]+ -> more ;
式:
my.greeting = "hello"
my.greeting = "hello ${} world"
任意のアイデア私が間違っているかもしれないもの?
私はこれがあなたの質問に対する答えではありませんが、あなたの答えにはコメント(コメントに収まらない)が多くあることを認識しています。だから、これで解決すれば、あなた自身の答えにこれを加え、それを受け入れることをお勧めします。私はこの答えを削除します。 –
ありがとうBart。私はあなたのことが素晴らしい答えだと思います。私の解決策よりもずっと良い。 –