Я пытаюсь обновить грамматику ANTLR, которая следует за следующей спецификацией
https://github.com/facebook/graphql/pull/327/files
StringValue ::
- `"` StringCharacter* `"`
- `"""` MultiLineStringCharacter* `"""`
StringCharacter ::
- SourceCharacter but not `"` or \ or LineTerminator
- \u EscapedUnicode
- \ EscapedCharacter
MultiLineStringCharacter ::
- SourceCharacter but not `"""` or `\"""`
- `\"""`
< /code>
(не вышеуказанное - логично - не antlr syntax) < /p>
Я попробовал следующее в Antrl 4, но это Не распознавать более 1 символа внутри тройной цитируемой строки < /p>
string : triplequotedstring | StringValue ;
triplequotedstring: '"""' triplequotedstringpart? '"""';
triplequotedstringpart : EscapedTripleQuote* | SourceCharacter*;
EscapedTripleQuote : '\\"""';
SourceCharacter :[\u0009\u000A\u000D\u0020-\uFFFF];
StringValue: '"' (~(["\\\n\r\u2028\u2029])|EscapedChar)* '"';
< /code>
С этими правилами он распознает '"" "" ""' ', но как только я добавлю больше символов, он не удастся < /p>
Например: '"" "abc" "" "' не разбираются и плагин Intellij для Antlr говорит < /p>
line 1:14 extraneous input 'abc' expecting {'"""', '\\"""', SourceCharacter}
< /code>
Как мне сделать тройные цитируемые строки в Antlr с '\ "" "' 'Escaping? < /p>
Подробнее здесь: https://stackoverflow.com/questions/461 ... ted-string