Тролль зеленый и толстый wrote:
> А я что-то не улавливаю особой разницы между PEG и регулярными > выражениями. Если регулярные выражения пишут, то и PEG писать будут.
RE проще PEG.
Posted via RSDN NNTP Server 2.1 beta
Re: [Голосование] Понимаете ли вы формальные грамматики?
VladD2, для языка реально было бы полезно, если бы в нем была встроенная семантика. Варианты:
1. Реализовать подмножество Пролога
2. Реализовать поддержку семантической сети, причем не какой-нить, а w3c, как-то: описание rdf-троек + встроенный reasoner для Semantic Web, например прикрутить что-то вроде http://clarkparsia.com/pellet/. Этот вариант имхо предпочтительнее, так как за Semantic Web — будущее (пусть и не очень близкое).
Я думаю, все это можно сделать в Nemerle существующими средствами, без расширения языка.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[2]: [Голосование] Понимаете ли вы формальные грамматики?
А формальные грамматики реализовывались бы не узкозаточенным инструментом, как вышеприведенные макросы, а на основе той самой семантики (например, путем задания семантического макроса с описанием грамматики). Это было бы фундаментальным решением, а не, пардон, костылем.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, Ziaw, Вы писали:
Z>Для меня — отсутствие, тот же antlr заюзать в .net проекте требует немалых телодвижений (все остальные просмотренные были еще менее удобны). От описания и отладки грамматики, до настроек билда.
+1
В качестве аргумента за отсутствие доложу, что в Haskell все кому ни лень пишут на parsec, на регэкспах гораздо реже.
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, Кэр, Вы писали:
Кэр>На мой взгляд ключевым тут является очень большие трудности в отладке всего этого добра.
Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.
Кэр>Ну и крайне редко приходится создавать свой язык и свою грамматику — так как это чаще всего опять же overkill.
До освоения регулярных выражений мне крайне редко приходилось решать задачи требующие настолько сложный разбор строк. (Тем кому заявления о сложности такого разбора сейчас кажутся смешными, рекомендую попробовать без регэкспов разбрать хотя бы дату и время в нескольких форматах и сравнить объем кода.)
Без удобного инструмента мозг неявно обходит такие задачи, благо в нашем деле почти каждая задача имеет множество удовлетворительных (не путать со школьной оценкой) решений.
То же самое и с удобным описанием грамматики, легкость решения подобных задач спровоцирует мозг на еще один угол зрения на каждую проблему. Я убежден, что задачи для PEG найдутся очень быстро. Разбор различных текстов реально довольно частая ситуация. То, что они часто образуют грамматику мы просто не замечаем. За неимением удобного инструмента кто-то пытается использовать регэкспы, кто-то сразу видит нерегулярность грамматики и пытается обойтись без разбора вообще.
К примеру задачи которые вспомнились легко: разбор сиквела, применение пользовательских фильтров, декларативные правила авторизации. Для всех них я нашел альтернативные решения, либо свел ограничил грамматику регулярной. Хотя все они решились бы гораздо изящнее и были бы мощнее если бы я легко мог создать AST из строки.
Вопросы как разобрать нерегулярную грамматику с помощью регулярных выражений возникают в .net примерно раз в месяц.
P.S. К сожалению есть и обратный эффект, только изучив инструмент, зачастую его используют совсем не по делу .
Re[2]: [Голосование] Понимаете ли вы формальные грамматики?
LP>VladD2, для языка реально было бы полезно, если бы в нем была встроенная семантика. Варианты: LP>1. Реализовать подмножество Пролога LP>2. Реализовать поддержку семантической сети, причем не какой-нить, а w3c, как-то: описание rdf-троек + встроенный reasoner для Semantic Web, например прикрутить что-то вроде http://clarkparsia.com/pellet/. Этот вариант имхо предпочтительнее, так как за Semantic Web — будущее (пусть и не очень близкое).
Против пролога ничего не имею. Вещь полезная. В полезности прикручивания к языку Semantic Web (как в прочем и вообще в полезности Semantic Web) я сильно сомневаюсь. Но главное, что все это совершенно никак не связано с возможностью использовать формальные грамматики для разбора чего-то в своих программах. Пролог может упростить создание DSL-ей, если конечно, использовать его в купе с парсером созданным по формальной грамматике.
LP>Я думаю, все это можно сделать в Nemerle существующими средствами, без расширения языка.
Все это конечно можно сделать на текущей версии немерла без ее расширения. Но этим должны заниматься те кто в этом что-то понимает, и те кому все это нужно.
Что касается использования формальных грамматик, то с недавнего времени для немерле есть макрос позволяющий генерировать парсеры на базе PEG-грамматик. Так что на текущей версии Nemerle можно в том числе пользоваться тем о чем идет речь в данном голосовании.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, Тролль зеленый и толстый, Вы писали:
ТЗИ>А я что-то не улавливаю особой разницы между PEG и регулярными выражениями. Если регулярные выражения пишут, то и PEG писать будут.
Я тоже слабо улавливаю. Разве что PEG сильно мощнее и (на мой взгляд) удобнее.
Но фактом является то, что регулярными выражениями пользуются часто, а PEG-ом или EBNF очень редко и обычно для создания парсеров больших языков, а как как средством парсинга разной мелочи в своей программе.
ТЗИ>А вообще, вы сперли мою идею. У меня несколько лет назад была идея создать язык, у которого весь синтаксис определяется в нем самом с помощью PEG. Я тогда еще понял, какой это ящик Пандоры.
Это даже не твоя идея. Она уже проскакивала раз дцать. Даже в Перл 6 что-то похожее (только для расширений) вроде бы делают. Есть даже прототипы. Правда совершенно не пригодные для использования на практике.
ТЗИ>Ну что ж, посмотрим, что у вас получится.
Здравствуйте, LaPerouse, Вы писали:
LP>А формальные грамматики реализовывались бы не узкозаточенным инструментом, как вышеприведенные макросы, а на основе той самой семантики (например, путем задания семантического макроса с описанием грамматики). Это было бы фундаментальным решением, а не, пардон, костылем.
Приведи пример этого гипотетического макроса. А то пока что даже не ясно что обсуждать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, Ziaw, Вы писали:
Кэр>>На мой взгляд ключевым тут является очень большие трудности в отладке всего этого добра.
Z>Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.
Не, ну, это не правда! PEG реализуется с помощью рекурсивного спуска, так что генерированный PEG-парсер не плохо отлаживается обычным отладчиком. Так что тут как раз регекспы в пролете.
Z>P.S. К сожалению есть и обратный эффект, только изучив инструмент, зачастую его используют совсем не по делу .
Это эффект Блаба.
Кстати, теперь то ты согласен с тем что этот эффект не сказка придуманная для того чтобы оправдывать свои неудачи?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, MasterZiv, Вы писали:
>> С целью сбора статистики. Интересно готов ли народ использовать на >> практике подобные вещи. Регекспы, при всей их убогости, используются по
MZ>Это типа DSL-и строить ?
И они в том числе. PEG или EBNF помогли бы упростить решение массы задач связанных с разбором строк. В прочем, очень часто эти задачи (не осмысленно) являются частью пути программиста к DSL-ям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, gandjustas, Вы писали:
G>Ну как минимум сделать опцией ignore whitepace, чтобы между любыми двумя токенами подразумевалось любое количество пробельных символов (в том числе нулевое если получится).
G>Кроме того нужна какая-нить "стандартная библиотека парсеров", чтобы можно было использовать в своих макросах. Обязательно что-то вроде "параметризованных парсеров" и парсер списка в стандартной бибилиотеке.
Здравствуйте, Ziaw, Вы писали:
Кэр>>На мой взгляд ключевым тут является очень большие трудности в отладке всего этого добра.
Z>Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.
Отлаживать регэкспы очень сложно. Нет дебага/трэйса. Без специальных средств вроде того же RegexBuddy (или как его там), который может визуализировать структуру регекспа — еще сложнее.
Кэр>>Ну и крайне редко приходится создавать свой язык и свою грамматику — так как это чаще всего опять же overkill.
Z>До освоения регулярных выражений мне крайне редко приходилось решать задачи требующие настолько сложный разбор строк. (Тем кому заявления о сложности такого разбора сейчас кажутся смешными, рекомендую попробовать без регэкспов разбрать хотя бы дату и время в нескольких форматах и сравнить объем кода.)
Z>Без удобного инструмента мозг неявно обходит такие задачи, благо в нашем деле почти каждая задача имеет множество удовлетворительных (не путать со школьной оценкой) решений.
Z>То же самое и с удобным описанием грамматики, легкость решения подобных задач спровоцирует мозг на еще один угол зрения на каждую проблему. Я убежден, что задачи для PEG найдутся очень быстро. Разбор различных текстов реально довольно частая ситуация. То, что они часто образуют грамматику мы просто не замечаем. За неимением удобного инструмента кто-то пытается использовать регэкспы, кто-то сразу видит нерегулярность грамматики и пытается обойтись без разбора вообще.
Кто-то просто юзает XML как вид текстового ввода, который не нужно структурировать и не сильно страдает. Очень редко на вход программы попадает сырой текст, который нужно разобрать. А когда попадает, то семантический анализ занимает гораздо большую часть, чем синтаксический — например, как в search engine.
Z>К примеру задачи которые вспомнились легко: разбор сиквела, применение пользовательских фильтров, декларативные правила авторизации. Для всех них я нашел альтернативные решения, либо свел ограничил грамматику регулярной. Хотя все они решились бы гораздо изящнее и были бы мощнее если бы я легко мог создать AST из строки.
Не знаю, не знаю. Я не сильно верю в DSL. Польза от них есть, но и вреда от них тоже немало. Когда DSL работает, то все прекрасно. Решение записывается легко и просто. Когда DSL глючит или его надо менять без потери качества, или нужно просто при парсинга выдавать адекватные ошибки разбора — то это крайне непростая задача. Скажем для записи своего конфига — гораздо лучше и надежнее определить схему XML документа, чем ваять свою грамматику — просто потому что выигрыш в читаемости почти наверняка не покроет затрат на поддержку.
Z>Вопросы как разобрать нерегулярную грамматику с помощью регулярных выражений возникают в .net примерно раз в месяц.
В основном — как распарсить HTML. Иногда как распарсить дату. Для этого нужен FAQ, потому что для этих задач есть стандартные решения, а не поддержка PEG грамматик.
Re[5]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, MasterZiv, Вы писали:
>>> С целью сбора статистики. Интересно готов ли народ использовать на >>> практике подобные вещи. Регекспы, при всей их убогости, используются по
MZ>>Это типа DSL-и строить ?
VD>И они в том числе. PEG или EBNF помогли бы упростить решение массы задач связанных с разбором строк. В прочем, очень часто эти задачи (не осмысленно) являются частью пути программиста к DSL-ям.
Кстати, а что насчет разбора бинарных данных?
Для Regexp в том виде, в котором мы сейчас видим это довольно сложная задача. Во-первых для бинарных нету "классов символов", что делает regex запись громоздкой, во вторых regexp может только вытащить токены, но не преобразовать их в структуру.
Некоторые библиотеки парсер-комбинаторов умеют работать с бинарными данными не хуже чем со строками. Будет ли такая возможность в N?
Re[6]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, LaPerouse, Вы писали:
LP>>А формальные грамматики реализовывались бы не узкозаточенным инструментом, как вышеприведенные макросы, а на основе той самой семантики (например, путем задания семантического макроса с описанием грамматики). Это было бы фундаментальным решением, а не, пардон, костылем. VD>Приведи пример этого гипотетического макроса. А то пока что даже не ясно что обсуждать.
А он будет выглядеть точно также, как пример выше, просто вместо узкоспециализированного алгоритма разбора будет работать куда более общий прологовский механизм унификации с bactracking. Например, в прологе есть предикат Add, который позволяет практически один в один переписать твой пример:
Здравствуйте, Кэр, Вы писали:
Z>>Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.
Кэр>Отлаживать регэкспы очень сложно. Нет дебага/трэйса. Без специальных средств вроде того же RegexBuddy (или как его там), который может визуализировать структуру регекспа — еще сложнее.
Все возражения против применимости PEG можно применить и к регэкспам. Однако мало кто рискнет утверждать, что это ненужная часть фреймворка.
Re[3]: [Голосование] Понимаете ли вы формальные грамматики?
LP>>VladD2, для языка реально было бы полезно, если бы в нем была встроенная семантика. Варианты: LP>>1. Реализовать подмножество Пролога LP>>2. Реализовать поддержку семантической сети, причем не какой-нить, а w3c, как-то: описание rdf-троек + встроенный reasoner для Semantic Web, например прикрутить что-то вроде http://clarkparsia.com/pellet/. Этот вариант имхо предпочтительнее, так как за Semantic Web — будущее (пусть и не очень близкое).
VD>Против пролога ничего не имею. Вещь полезная. В полезности прикручивания к языку Semantic Web (как в прочем и вообще в полезности Semantic Web) я сильно сомневаюсь.
Пролог вещь полезная, но у него предельно ограниченная сфера применения. И в своей нише семантическая сеть (не Semantic Web, а способ организации знаний) рвет Пролог — практика показала, что для создания огромных онтологий логика первого порядка не годится в силу сложности получающихся взаимосвязей. Процесс выполнения запросов сложно представим и управляем, что порождает проблемы с производительностью, в то время как в семантической сети все куда прозрачнее. Единственное место, где пролог практически не имеет конкурентов — это как раз распознавание формальных и естественных языков, то есть ровно то, что нужно тебе.
VD>Но главное, что все это совершенно никак не связано с возможностью использовать формальные грамматики для разбора чего-то в своих программах. Пролог может упростить создание DSL-ей, если конечно, использовать его в купе с парсером созданным по формальной грамматике.
Пролог позволяет записать формальную грамматику почти в один в один. См. пример выше. Плюс у него еще есть преимущество — если в случае синтаксического макроса ты по сути привязан к одному алгоритму парсинга, то в прологе ты можешь задать свой. Правильнее сказать, конечно, что в прологе тоже один алгоритм — поиск с откатами, но он куда более общий, позволяет описывать грамматику очень гибко.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[7]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, Ziaw, Вы писали:
VD>>Кстати, теперь то ты согласен с тем что этот эффект не сказка придуманная для того чтобы оправдывать свои неудачи?
Z>О чем ты?
Ты уже забыл в каком разговоре родилась идея NRails?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [Голосование] Понимаете ли вы формальные грамматики?
Здравствуйте, VladD2, Вы писали:
VD>>>Кстати, теперь то ты согласен с тем что этот эффект не сказка придуманная для того чтобы оправдывать свои неудачи?
Z>>О чем ты?
VD>Ты уже забыл в каком разговоре родилась идея NRails?