Инфраструктура обработки ошибок в языках
Issue #311
new
Originally reported on Google Code with ID 311
Сразу хорошо мы не сделаем (по ошибкам парсера позже придется поработать), но пока надо
обеспечить возможность клиентам блока проверять лексическую/синтаксическую корректность
строки на языке до попытки ее обработать и ругаться (хоть как-то) пользователю где
что не так.
Поэтому - добавил в processed_string поле errors (не стал делать set_errors - если
надо, напишите). Лексер и парсер должны туда копировать объекты ошибок - дети от ast_node_base
с прописанной позицией в тексте. Эти же объекты могут включаться в поток лексем/дерево,
чтобы оно было все-таки деревом и чтобы ничего не было пропущено - можете посмотреть
на block_regex_constructor как он показывает в дереве синтаксические ошибки, там мы
реализовывали похожий подход. (Кстати, там есть забавный подход к отлову скобочных
ошибок в выражениях; но боюсь для полного С++ парсера это будет тяжко, нужно другие
варианты искать).
Сейчас критично сделать обработку лексических и хоть в каком-то виде синтаксических
(т.е. без подробных и понятных сообщений о природе ошибки там где их сделать нелегко,
ибо в LALR-парсинге это далеко не всегда очевидная задача - но с position и включенных
в дерево) - чтобы лексер/персер заполняли массив errors (может понадобится написать
set_errors) и он мог использоваться клиентами.
Также для этой задачи требуется давно нужное добавление в позицию charstart/charend
- координат в символах от начала строки (считая символы перевода строки), в противном
случае обрабатывать многострончные "строки" очень неудобно. Говорил я вам об этом давно.
Работа более-менее механическая в лексере, плюс немного кода в парсере. Работу в лексере
можете после пары примером поручить кому-то из младших, если они ждут вас по своим
задачам...
Reported by oasychev
on 2014-12-03 00:30:43
Comments (6)
-
Account Deleted -
reporter А, сорри - позиции да есть. Нужно тогда заполнить массив ошибками, чтобы клиенты могли легко проверить их наличие и печатать сообщения....
Reported by
oasychev
on 2014-12-05 16:21:17 -
Account Deleted Я правильно понял, что имеются ввиду ошибки лексического и синтаксического разбора?
Reported by
mamontov.dp
on 2014-12-05 18:35:29 -
reporter Да, причем ошибки лексические могут быть описаны полноценным образом, а синтаксические - как получится учитывая LALR. Но position быть должны "объекты ошибок - дети от ast_node_base с прописанной позицией в тексте"
Reported by
oasychev
on 2015-04-09 20:53:40 -
Сделал первый подход к реализации данной задачи. Вообще понял, что у нас как-то странно это организовано - есть же lexical_error, который отвечает за ошибки при разборе. Сделал, чтобы его объектами заполнялось данное поле - при лексическом поле оно копируется из block_formal_langs_token_stream::errors, при синтаксическом разборе - заполняется объектами block_formal_langs_parsing_error.
-
Кстати - не могу изменить статус, что, не есть хорошо. Не стоит ли посмотреть права?
- Log in to comment
Reported by
mamontov.dp
on 2014-12-03 12:12:57