Комментарии 13
где вы были когда я сдавал «Принципы компиляторов» =(
вопрос, насколько понятные сообщения о синтаксических ошибках будет давать компилятор? насколько сложно будет добавить красивые сообщения об ошибках типа
test.jsk line 1 pos 4: '(' expected got number if 10 < x) { ^
Встроенных бизоньих средств для этого не знаю; но знаю, где хакать в сгенерированном парсере, чтоб сообщения были такими :)
Интересная идея для будущих постов, кстати.
Интересная идея для будущих постов, кстати.
т.е. если требуется улучшить сообщение об ошибке надо править сгенерированный код?
при этом если потребуется поправить что-то в грамматике придется перегенерировать парсер, а потом туда перекопировать аккуратно все свои правки связанные с улучшениями сообщений об ошибках?
не очень удобно, вы не находите?
при этом если потребуется поправить что-то в грамматике придется перегенерировать парсер, а потом туда перекопировать аккуратно все свои правки связанные с улучшениями сообщений об ошибках?
не очень удобно, вы не находите?
Встроенных бизоньих средств нет, так как это не его область ответственности.
Обычно это делают в лексере: т.е. на паттерн "\n" делают счётчик строк и сброс положения столбца. А в остальные правила добавляют счётчик количества прочитанного символа (что-то вроде CurColumn+=strlen(yytext); )
Обычно это делают в лексере: т.е. на паттерн "\n" делают счётчик строк и сброс положения столбца. А в остальные правила добавляют счётчик количества прочитанного символа (что-то вроде CurColumn+=strlen(yytext); )
А дальше с каждым токеном сопоставляют информацию о положении: имя файла, начало и конец.
Это верно, но информацию «какой символ попался и какой должен был быть» бизон мог бы и передавать в
По умолчанию, не передаёт.
Передавать, как выяснилось, умеет: нужно упомянуть в разделе объявлений
yyerror()
.По умолчанию, не передаёт.
Передавать, как выяснилось, умеет: нужно упомянуть в разделе объявлений
%error-verbose
[tyomitch@home ~]$ ./a.out
if 10 < x {
syntax error, unexpected NUM, expecting '(', line 1
Извините, как-то однобоко. Вы рассмотрели грамматики и разбор, и совершенно упустили (а) проверку типов (какие синтаксические конструкции разрешены, а какие — нет), (б) семантику (описание выполнения). В настоящих языках программирования это гораздо важнее, причем именно с точки зрения их использования.
Всё знакомо до дикой боли в голове) Как раз в этом семестре компилятор писали. Где же вы были полгода назад?)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Компиляция. 4: игрушечный ЯП