Разбор токенов внутри строк в Antlr4 - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь разобраться, как написать грамматику, которая будет сначала анализировать ввод для строк, а затем, когда строки будут найдены, анализировать эту строку.

Например, если у меня был вводнапример:

var1 = "world"
someVariable = "hello {{var1}}"

Результат, который я хочу получить, для someVariable будет равен "hello world".

Теперь я понимаю, как написать грамматику для установки переменной в строку, но я не могу понять, как разобрать эту строку для синтаксиса усов, чтобы ввести значение внутри var1.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Проще сделать это в два шага:

  • Разобрать входные данные как обычно (т. Е. Определить назначения, не анализируя содержимое строк)
  • Затем оценитьassignments
    • При назначении строки переменной, проанализируйте ее содержимое с помощью другого синтаксического анализатора (или, возможно, даже просто с помощью регулярного выражения, если синтаксис достаточно прост), чтобы определить любые замены.
0 голосов
/ 04 июня 2018

Это не то, что делает ANTLR.ANTLR может, конечно, проанализировать ваш ввод и даже токенизировать "hello {{var1}}" отдельно 1 , но он не оценивает var1 и не подставляет его.Это то, что вам нужно будет сделать после того, как ANTLR выполнит анализ 2 .

  1. извлечение документов по лексическим режимам: https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#lexical-modes
  2. в этом разделе вопросов и ответов показаноПростой пример того, как оценить что-либо с помощью посетителя: Операторы If / else в ANTLR с использованием слушателей
...