Украшающий код - это, по сути, просто преобразование AST обратно в код, удаление оригинального пробела и его замена нужным форматированием.
Следующая грамматика преобразует список нечувствительных к регистру символов a
в массив:
Expression = _ array:( a:"a"i _ {return a} )+ _ {return array}
_ = [ \t\n]*
Итак, с учетом этого ввода:
aa
aaaAa
a
Вы получите этот вывод:
[
"a",
"a",
"a",
"a",
"a",
"A",
"a",
"a"
]
Чтобы "украсить" этот список, вы просто преобразовали бы массив обратно в список, за исключением случаев с более регулярным интервалом:
result.join(" ");
// produces "a a a a a A a a", which is syntactically identical