Re[11]: Mixfix синтаксис.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.09 10:20
Оценка:
Здравствуйте, thesz, Вы писали:

T>Я не про разбор говорю, а про отображение обратно в исходный синтаксис для отчёта пользователю.


Даже если у тебя есть какие-то проблемы преобразования AST в текст, то всегда есть положение ветвей AST в коде и ты можешь просто выделить подстроку и поместить ее в сообщение об ошибке.

В общем, надуманная проблема.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Mixfix синтаксис.
От: thesz Россия http://thesz.livejournal.com
Дата: 26.05.09 10:33
Оценка:
T>>Я не про разбор говорю, а про отображение обратно в исходный синтаксис для отчёта пользователю.
Z>А не проще печатать исходную строку? — компиляторы обычно так и делают.

Сообщение об ошибке выводится в терминах внутреннего представления, а строка имеет внешний синтаксис.

Пользователю придётся переводить.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[12]: Mixfix синтаксис.
От: thesz Россия http://thesz.livejournal.com
Дата: 26.05.09 10:45
Оценка:
T>>Я не про разбор говорю, а про отображение обратно в исходный синтаксис для отчёта пользователю.
VD>Даже если у тебя есть какие-то проблемы преобразования AST в текст, то всегда есть положение ветвей AST в коде и ты можешь просто выделить подстроку и поместить ее в сообщение об ошибке.

У нас есть исходная подстрока "здесь мы сравниваем входной список с образцом, первый элемент которого цифра один, второй — цифра два и третий и последний — цифра три" и наше внутреннее представление (123:[]))). Ошибка связана с цифрой 2, считается, что она не может туда попасть, поскольку две другие цифры нечётные.

Можно показать исходную строку, внутреннее представление и показать ошибку во внутреннем представлении. Но это заставит пользователя переводить ошибку в термины программы.

VD>В общем, надуманная проблема.


Товарищи из Helium с тобой не согласятся.

сообщения об ошибках типов в Хаскеле очень сложны (хотя и не так сложны, как в C++).

Поэтому для Хелиума был разработан специальный алгоритм вывода типов путём поиска наименьшего пути по графу ограничений на типы, и вот по нему строится сообщение об оишбке.

И ещё. Правила вывода типов с классами типов специально были записаны в конкретном синтаксисе Хаскеля, а не в терминах гораздо более простого Core, как раз для того, чтобы давать внятные сообщения об ошибках.

См. здесь http://homepages.inf.ed.ac.uk/wadler/topics/type-classes.html "Type classes in Haskell": "In contrast to an other work on type classes, the rules presented here relate directly to user programs."

Так что кому "надуманная проблема", а кому "критерий дизайна".
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[13]: Mixfix синтаксис.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.09 10:56
Оценка:
Здравствуйте, thesz, Вы писали:

T>У нас есть исходная подстрока "здесь мы сравниваем входной список с образцом, первый элемент которого цифра один, второй — цифра два и третий и последний — цифра три" и наше внутреннее представление (123:[]))). Ошибка связана с цифрой 2, считается, что она не может туда попасть, поскольку две другие цифры нечётные.


T>Можно показать исходную строку, внутреннее представление и показать ошибку во внутреннем представлении. Но это заставит пользователя переводить ошибку в термины программы.


У тебя будет местоположение всего списка и местоположение места с ошибкой (двойки). Ты сформируешь сообщение в ктором говорится, что "в списки 'подстрока всего списка из исходного файла' недопустимо значение 2 так как ....". При этом ты установишь местоположение (Location) на на двойку.

VD>>В общем, надуманная проблема.


T>Товарищи из Helium с тобой не согласятся.


Мне честно говоря все равно, что думают там разные товарищи, но этот товарищь вообще вряд ли может высказывать свое мнение, так как он существо не одухотворенное .

T>сообщения об ошибках типов в Хаскеле очень сложны (хотя и не так сложны, как в C++).


Я бы даже скзал, что они сложнее С++-ных, но это уже отдельный разговор.
Пробелмы сообщений в Хаскеле совершенно очевидны. Они проистекают из его подсистемы вывода типов и его системы типов. К парсингу это отношения не имеет.

T>Поэтому для Хелиума был разработан специальный алгоритм вывода типов путём поиска наименьшего пути по графу ограничений на типы, и вот по нему строится сообщение об оишбке.


Молодцы. Идут в правильном направлении. Я бы на их месте еще бы ввел обязательную аннотацию типов для публичных функций и типов.

T>И ещё. Правила вывода типов с классами типов специально были записаны в конкретном синтаксисе Хаскеля, а не в терминах гораздо более простого Core, как раз для того, чтобы давать внятные сообщения об ошибках.


Тоже замечательно.

T>См. здесь http://homepages.inf.ed.ac.uk/wadler/topics/type-classes.html "Type classes in Haskell": "In contrast to an other work on type classes, the rules presented here relate directly to user programs."


T>Так что кому "надуманная проблема", а кому "критерий дизайна".


Надумана та проблема, которую озвучиваешь ты, а не проблема вывода сообщений об ошибках в Хаскеле.
PEG с точки зрения организации сообщений об ошибках парсинга ничем не отличается от рукописного парсера.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Mixfix синтаксис.
От: thesz Россия http://thesz.livejournal.com
Дата: 26.05.09 11:16
Оценка:
VD>У тебя будет местоположение всего списка и местоположение места с ошибкой (двойки). Ты сформируешь сообщение в ктором говорится, что "в списки 'подстрока всего списка из исходного файла' недопустимо значение 2 так как ....". При этом ты установишь местоположение (Location) на на двойку.

Паллиативное решение. Но, судя по всему, хорошего так и нет.

T>>Поэтому для Хелиума был разработан специальный алгоритм вывода типов путём поиска наименьшего пути по графу ограничений на типы, и вот по нему строится сообщение об оишбке.

VD>Молодцы. Идут в правильном направлении. Я бы на их месте еще бы ввел обязательную аннотацию типов для публичных функций и типов.

Он выдаёт предупреждения об их отсутствии и сразу же показывает тип, который надо подставить.

T>>См. здесь http://homepages.inf.ed.ac.uk/wadler/topics/type-classes.html "Type classes in Haskell": "In contrast to an other work on type classes, the rules presented here relate directly to user programs."

T>>Так что кому "надуманная проблема", а кому "критерий дизайна".
VD>Надумана та проблема, которую озвучиваешь ты, а не проблема вывода сообщений об ошибках в Хаскеле.
VD>PEG с точки зрения организации сообщений об ошибках парсинга ничем не отличается от рукописного парсера.

За исключением того, что его правила могут меняться, чего и хочется. Здесь у нас список [commaList], а здесь — список пар, где вместо запятой стрелка.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[15]: Mixfix синтаксис.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.09 11:27
Оценка:
Здравствуйте, thesz, Вы писали:

VD>>У тебя будет местоположение всего списка и местоположение места с ошибкой (двойки). Ты сформируешь сообщение в ктором говорится, что "в списки 'подстрока всего списка из исходного файла' недопустимо значение 2 так как ....". При этом ты установишь местоположение (Location) на на двойку.


T>Паллиативное решение. Но, судя по всему, хорошего так и нет.


А что в нем плохого?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Mixfix синтаксис.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.09 13:00
Оценка:
Здравствуйте, thesz, Вы писали:

T>Я не про разбор говорю, а про отображение обратно в исходный синтаксис для отчёта пользователю.


И причем тут PEG? Пег — это формализм парсинга. Замена CFG.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Mixfix синтаксис.
От: thesz Россия http://thesz.livejournal.com
Дата: 26.05.09 14:39
Оценка:
T>>Я не про разбор говорю, а про отображение обратно в исходный синтаксис для отчёта пользователю.
VD>И причем тут PEG? Пег — это формализм парсинга. Замена CFG.

Если мы его используем для "расширения синтаксиса" (как mixfix), то весьма причем.

(ушёл ставить себе camlp4 поиграться с расширениями синтаксиса. может, они успели что придумать.)
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[13]: Mixfix синтаксис.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.05.09 18:19
Оценка:
Здравствуйте, thesz, Вы писали:

T>(ушёл ставить себе camlp4 поиграться с расширениями синтаксиса. может, они успели что придумать.)


Там был весьма банальный препроцессор на базе LL(1)-парсера. Так что вряд ли.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.