Анализ уровня отступа с помощью PEG.js

У меня по сути тот же вопрос, что и PEG для отступов в стиле Python , но я хотел бы получить немного больше указаний относительно этого ответа .

Ответ успешно генерирует массив строк, каждая строка ввода которых содержит INDENT и DEDENT между строками. Похоже, что он в значительной степени использовал PEG.js для токенизации, но реального синтаксического анализа не происходит.

Итак, как я могу расширить его пример, чтобы сделать некоторый реальный синтаксический анализ?

Например, как я могу изменить эту грамматику:

start = obj
obj = id:id children:(indent obj* outdent)?
    {
        if (children) {
            let o = {}; o[id] = children[1];
            return o;
        } else {
            return id;
        }
    }
id = [a-z]
indent = '{'
outdent = '}'

использовать отступы вместо фигурных скобок для разграничения блоков и при этом получать тот же результат?

(Используйтеhttp://pegjs.majda.cz/onlineчтобы проверить эту грамматику со следующими входными данными:a{bcd{zyx{}}})

9
задан Nils 6 July 2019 в 06:32
поделиться