Mam zasadniczo to samo pytanie jak PEG for Python style indentation, ale chciałbym trochę więcej kierunek dotyczących this answer.Parse poziom wcięcia z PEG.js
Odpowiedź powodzeniem generuje tablicę łańcuchów, które każdy wiersz wejścia z „” i „TIRET DEDENT” między wierszami. Wygląda na to, że jest dość często używany w PEG.js do tokenizacji, ale nie ma prawdziwego przetwarzania.
Więc jak mogę przedłużyć jego przykład zrobić jakąś rzeczywistą analizowania?
Jako przykład, w jaki sposób mogę zmienić tę gramatykę:
start = obj
obj = id:id children:(indent obj* outdent)?
{
var o = {};
o[id] = children[1];
return (children[1] ? o : id);
}
id = [a-z]
indent = '{'
outdent = '}'
używania wcięcia zamiast szelek do wyznaczenia klocki, i jeszcze dostać taki sam efekt?
(Użyj http://pegjs.majda.cz/online przetestować tę gramatykę z następującego kodu: a{bcd{zyx{}}}
)
Naprawdę doceniam tego anwsera. Jak możesz wymyślić tę metodę? – jiyinyiyong
Jeśli skopiuję/wkleję to bezpośrednio do http://pegjs.majda.cz/online, to się nie skompiluje. Po kilku poprawkach nie jest jasne, jak je "naprawić". – Clearly
Po przetestowaniu tego fragment kodu kompiluje się i generuje oczekiwaną wydajność. Nie wiesz, jakie błędy tam trafiłeś. – chakrit