Разбор интерполяции строк в ANTLR
Я работаю над простым DSL-манипулированием строками для внутренних целей и хотел бы, чтобы язык поддерживал интерполяцию строк, как это используется в Ruby.
Например:
name = "Bob"
msg = "Hello ${name}!"
print(msg) # prints "Hello Bob!"
Я пытаюсь реализовать свой анализатор в ANTLRv3, но я довольно неопытен с использованием ANTLR, поэтому я не уверен, как реализовать эту функцию. До сих пор я указывал свои строковые литералы в лексере, но в этом случае мне, очевидно, потребуется обработать содержимое интерполяции в синтаксическом анализаторе.
Моя текущая строковая литеральная грамматика выглядит так:
STRINGLITERAL : '"' ( StringEscapeSeq | ~( '\\' | '"' | '\r' | '\n' ) )* '"' ;
fragment StringEscapeSeq : '\\' ( 't' | 'n' | 'r' | '"' | '\\' | 'Перемещение обработки строкового литерала в парсер, кажется, заставляет все остальное перестать работать как следует. Беглый поиск в интернете не дал никакой информации. Любые предложения относительно того, как начать на этом?
| ('0'..'9')) ;
Перемещение обработки строкового литерала в парсер, кажется, заставляет все остальное перестать работать как следует. Беглый поиск в интернете не дал никакой информации. Любые предложения относительно того, как начать на этом?