Size: a a a

Compiler Development

2021 May 26

h

hazer_hazer in Compiler Development
такс. Стоп....
Спасибо за идею...
Я же храню Span'ы для каждой ноды в AST. И мне не нужно строить CST для linting'а, я могу просто по Span'ам чекать переносы строк и отступы 😮
источник

h

hazer_hazer in Compiler Development
да. я чет ступил. вы мне сейчас глаза открыли
источник

K

Kir in Compiler Development
Переносы и отступы можно тупо после лексера кодом в 30 строк вставить, как {, ;, } - лексемы
источник

K

Kir in Compiler Development
Если у лексем есть span
источник

h

hazer_hazer in Compiler Development
да. у меня, у каждого токена есть Span и у каждой ноды
источник

K

Kir in Compiler Development
У меня где-то валялся код, которым я это делаю, но он на хаскелле. Надо?
источник

РС

Роман Соловьев... in Compiler Development
а зачем сохранять перенос же вообще? для лексера это все сплошной текст
источник

h

hazer_hazer in Compiler Development
код чего?
источник

h

hazer_hazer in Compiler Development
я бы вам порекомендовал вообще в данный момент забить на CST и думать только об AST
источник

к

кана in Compiler Development
в CST хранят, именно в этом же суть CST
источник

K

Kir in Compiler Development
Расстановщика {;}, чтобы из отступов сделать явную структуру
источник

h

hazer_hazer in Compiler Development
Я вот тоже думал, что в CST хранят вообще всё, так как нельзя же понять, что перед функцией func на этой же строке...
Ведь лексему func мы в AST не запишем
источник

K

Kir in Compiler Development
У меня все переносы строк вне строковых литералов и все пробелы подъедает лексер, а в дереве только span'ы остаются
источник

h

hazer_hazer in Compiler Development
у меня также. Но вот именно для реального CST нужно всё запомнить, если линтер нужно нормальный сделать.
источник

K

Kir in Compiler Development
источник

h

hazer_hazer in Compiler Development
а. понял.
но вы же понимаете, что такой хак не пройдет с delimiter'ами, как , например?
источник

K

Kir in Compiler Development
В какой, например, ситуации?
источник

h

hazer_hazer in Compiler Development
foo(a, b, c)
и
foo(a    ,     b ,c)
источник

K

Kir in Compiler Development
У меня только определённые токены могут стартовать уровень индентации - по следующему за ними токену
источник

h

hazer_hazer in Compiler Development
где запятые, Либовски?
источник