Forwarded from Казанский Ипподром Имени Дмитрия Кумарова
"Nah, I'd freeze"
Forwarded from gavr_sas
Очень быстрый гайд по написанию фронтенда языка, пишем лексер(токенайзер), он нужен чтобы превращать неразборчивую писанину в цепочки токенов, типа
s_aS =
0.3432345f
в
[Identifier Equel Float]
Чтобы потом с ними можно было удобнее работать, сохраняем в токенах номер строки и начальную позицию токена, чтобы выдавать юзверам адекватные ошибки
Сам лексер хранит текущую позицию и возможно вам понадобится хранить количество пробелов текущей строки, если хотите сделать чтобы отступы чего то значили.
Нам понадобится набор базовых функций
1) step — поглащает следующие n символов, то есть
ab^cde
^ - курсор
step(2) вернет cd
abcd^e
2) peek — как step но не поглащает, нужна чтобы проверять что там впереди
ab^cde, peek(2) -> cd, ab^cde
3) check(str: string, distance: int): bool — хелпер чтоб проверять что в переди то что мы ожидаем, использует peek
4) match — ровно тоже самое что check, но поглащает строку
^if(sas)
match("if") -> true, if^(sas)
Воот, это база, следующий выпуск завтра
s_aS =
0.3432345f
в
[Identifier Equel Float]
Чтобы потом с ними можно было удобнее работать, сохраняем в токенах номер строки и начальную позицию токена, чтобы выдавать юзверам адекватные ошибки
Сам лексер хранит текущую позицию и возможно вам понадобится хранить количество пробелов текущей строки, если хотите сделать чтобы отступы чего то значили.
Нам понадобится набор базовых функций
1) step — поглащает следующие n символов, то есть
ab^cde
^ - курсор
step(2) вернет cd
abcd^e
2) peek — как step но не поглащает, нужна чтобы проверять что там впереди
ab^cde, peek(2) -> cd, ab^cde
3) check(str: string, distance: int): bool — хелпер чтоб проверять что в переди то что мы ожидаем, использует peek
4) match — ровно тоже самое что check, но поглащает строку
^if(sas)
match("if") -> true, if^(sas)
Воот, это база, следующий выпуск завтра
Forwarded from gavr_sas
gavr_sas
Очень быстрый гайд по написанию фронтенда языка, пишем лексер(токенайзер), он нужен чтобы превращать неразборчивую писанину в цепочки токенов, типа s_aS = 0.3432345f в [Identifier Equel Float] Чтобы потом с ними можно было удобнее работать, сохраняем…
Придумайте список токенов на которые делится ваш язык(не АСТ) и напишите парсер для каждой используя базу и несколько хелпер функций вроде isAlphaNumeric для простого парсинга идентификаторов 3
#Parser
#Parser