Синтаксический анализ маркеров внутри строк в Antlr4
Я пытаюсь понять, как написать грамматику, которая сначала разберет входные данные для строк, а затем, когда строки будут найдены, разберет эту строку.
Например, если бы у меня был вход, такой как:
var1 = "world"
someVariable = "hello {{var1}}"
Результат, который я хочу, чтобы someVariable был равен "hello world".
Теперь я понимаю, как написать грамматику, чтобы установить переменную в строку, но я не могу понять, как разобрать эту строку для синтаксиса усов, чтобы ввести значение внутри var1.
Заранее спасибо!
2 ответа:
Это проще сделать в два этапа:
- разбирать входные данные как обычно (т. е. определять назначения, не анализируя содержимое строк)
- затем оцените задания
- присваивая строку переменной, проанализируйте ее содержимое с помощьюдругого парсера (или, возможно, даже просто с помощью регулярного выражения, если синтаксис достаточно прост), чтобы определить любые замены.
Это не то, что делает ANTLR. ANTLR может, конечно, разобрать ваш ввод, и даже маркировать
"hello {{var1}}"
отдельно1, но он не оцениваетvar1
и не заменяет его. Это то, что вам нужно будет сделать после того, как ANTLR закончит разбор2.
- проверьте документы по лексическим режимам: https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#lexical-modes
- этот вопрос и ответ показывает простой пример, как оценить что-то с помощью посетителя: If / else операторы в ANTLR с использованием слушателей