У меня по сути тот же вопрос, что и 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{}}}
)