Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
От: MasterZiv СССР  
Дата: 21.06.10 08:47
Оценка:
Тролль зеленый и толстый wrote:

> А я что-то не улавливаю особой разницы между PEG и регулярными

> выражениями. Если регулярные выражения пишут, то и PEG писать будут.

RE проще PEG.
Posted via RSDN NNTP Server 2.1 beta
Re: [Голосование] Понимаете ли вы формальные грамматики?
От: LaPerouse  
Дата: 21.06.10 09:53
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>http://rsdn.ru/poll/2615.aspx
Автор: VladD2
Дата: 17.06.10
Вопрос: Насколько вы понимаете формальные грамматике языков? Например, BNF или PEG.


VladD2, для языка реально было бы полезно, если бы в нем была встроенная семантика. Варианты:
1. Реализовать подмножество Пролога
2. Реализовать поддержку семантической сети, причем не какой-нить, а w3c, как-то: описание rdf-троек + встроенный reasoner для Semantic Web, например прикрутить что-то вроде http://clarkparsia.com/pellet/. Этот вариант имхо предпочтительнее, так как за Semantic Web — будущее (пусть и не очень близкое).

Я думаю, все это можно сделать в Nemerle существующими средствами, без расширения языка.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[2]: [Голосование] Понимаете ли вы формальные грамматики?
От: LaPerouse  
Дата: 21.06.10 09:56
Оценка:
А формальные грамматики реализовывались бы не узкозаточенным инструментом, как вышеприведенные макросы, а на основе той самой семантики (например, путем задания семантического макроса с описанием грамматики). Это было бы фундаментальным решением, а не, пардон, костылем.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 21.06.10 12:02
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Для меня — отсутствие, тот же antlr заюзать в .net проекте требует немалых телодвижений (все остальные просмотренные были еще менее удобны). От описания и отладки грамматики, до настроек билда.


+1
В качестве аргумента за отсутствие доложу, что в Haskell все кому ни лень пишут на parsec, на регэкспах гораздо реже.
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
От: Ziaw Россия  
Дата: 21.06.10 16:19
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>На мой взгляд ключевым тут является очень большие трудности в отладке всего этого добра.


Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.

Кэр>Ну и крайне редко приходится создавать свой язык и свою грамматику — так как это чаще всего опять же overkill.


До освоения регулярных выражений мне крайне редко приходилось решать задачи требующие настолько сложный разбор строк. (Тем кому заявления о сложности такого разбора сейчас кажутся смешными, рекомендую попробовать без регэкспов разбрать хотя бы дату и время в нескольких форматах и сравнить объем кода.)

Без удобного инструмента мозг неявно обходит такие задачи, благо в нашем деле почти каждая задача имеет множество удовлетворительных (не путать со школьной оценкой) решений.

То же самое и с удобным описанием грамматики, легкость решения подобных задач спровоцирует мозг на еще один угол зрения на каждую проблему. Я убежден, что задачи для PEG найдутся очень быстро. Разбор различных текстов реально довольно частая ситуация. То, что они часто образуют грамматику мы просто не замечаем. За неимением удобного инструмента кто-то пытается использовать регэкспы, кто-то сразу видит нерегулярность грамматики и пытается обойтись без разбора вообще.

К примеру задачи которые вспомнились легко: разбор сиквела, применение пользовательских фильтров, декларативные правила авторизации. Для всех них я нашел альтернативные решения, либо свел ограничил грамматику регулярной. Хотя все они решились бы гораздо изящнее и были бы мощнее если бы я легко мог создать AST из строки.

Вопросы как разобрать нерегулярную грамматику с помощью регулярных выражений возникают в .net примерно раз в месяц.

P.S. К сожалению есть и обратный эффект, только изучив инструмент, зачастую его используют совсем не по делу .
Re[2]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.10 18:26
Оценка:
Здравствуйте, LaPerouse, Вы писали:

VD>>http://rsdn.ru/poll/2615.aspx
Автор: VladD2
Дата: 17.06.10
Вопрос: Насколько вы понимаете формальные грамматике языков? Например, BNF или PEG.


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]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.10 18:33
Оценка:
Здравствуйте, Тролль зеленый и толстый, Вы писали:

ТЗИ>А я что-то не улавливаю особой разницы между PEG и регулярными выражениями. Если регулярные выражения пишут, то и PEG писать будут.


Я тоже слабо улавливаю. Разве что PEG сильно мощнее и (на мой взгляд) удобнее.
Но фактом является то, что регулярными выражениями пользуются часто, а PEG-ом или EBNF очень редко и обычно для создания парсеров больших языков, а как как средством парсинга разной мелочи в своей программе.

ТЗИ>А вообще, вы сперли мою идею. У меня несколько лет назад была идея создать язык, у которого весь синтаксис определяется в нем самом с помощью PEG. Я тогда еще понял, какой это ящик Пандоры.


Это даже не твоя идея. Она уже проскакивала раз дцать. Даже в Перл 6 что-то похожее (только для расширений) вроде бы делают. Есть даже прототипы. Правда совершенно не пригодные для использования на практике.

ТЗИ>Ну что ж, посмотрим, что у вас получится.


Дык может лучше присоединиться? Здесь
Автор: VladD2
Дата: 17.06.10
идет обсуждение новых фич Nemerle 2. Можно начать с присоединения к обсуждению.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.10 18:42
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>RE проще PEG.


Да ну? То то я на PEG описываю грамматики с пол пинка, а на регекспах постоянно спотыкаюсь.

PEG позволяет вводить имена правил и делать рекурсию. Это конечно некоторое усложнение, но оно ни что по сравнению с полноценной читаемостью.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.10 18:43
Оценка:
Здравствуйте, LaPerouse, Вы писали:

LP>А формальные грамматики реализовывались бы не узкозаточенным инструментом, как вышеприведенные макросы, а на основе той самой семантики (например, путем задания семантического макроса с описанием грамматики). Это было бы фундаментальным решением, а не, пардон, костылем.


Приведи пример этого гипотетического макроса. А то пока что даже не ясно что обсуждать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.10 18:48
Оценка:
Здравствуйте, Ziaw, Вы писали:

Кэр>>На мой взгляд ключевым тут является очень большие трудности в отладке всего этого добра.


Z>Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.


Не, ну, это не правда! PEG реализуется с помощью рекурсивного спуска, так что генерированный PEG-парсер не плохо отлаживается обычным отладчиком. Так что тут как раз регекспы в пролете.

Z>P.S. К сожалению есть и обратный эффект, только изучив инструмент, зачастую его используют совсем не по делу .


Это эффект Блаба.

Кстати, теперь то ты согласен с тем что этот эффект не сказка придуманная для того чтобы оправдывать свои неудачи?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.10 18:50
Оценка:
Здравствуйте, MasterZiv, Вы писали:

>> С целью сбора статистики. Интересно готов ли народ использовать на

>> практике подобные вещи. Регекспы, при всей их убогости, используются по

MZ>Это типа DSL-и строить ?


И они в том числе. PEG или EBNF помогли бы упростить решение массы задач связанных с разбором строк. В прочем, очень часто эти задачи (не осмысленно) являются частью пути программиста к DSL-ям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.10 18:55
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ну как минимум сделать опцией ignore whitepace, чтобы между любыми двумя токенами подразумевалось любое количество пробельных символов (в том числе нулевое если получится).


G>Кроме того нужна какая-нить "стандартная библиотека парсеров", чтобы можно было использовать в своих макросах. Обязательно что-то вроде "параметризованных парсеров" и парсер списка в стандартной бибилиотеке.


Если интересно, поглядите вот эти обсуждения:
http://rsdn.ru/forum/nemerle/3847445.aspx
Автор: VladD2
Дата: 17.06.10

http://rsdn.ru/forum/nemerle/3851198.aspx
Автор: VladD2
Дата: 21.06.10
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Голосование] Понимаете ли вы формальные грамматики?
От: Кэр  
Дата: 21.06.10 22:22
Оценка:
Здравствуйте, Ziaw, Вы писали:

Кэр>>На мой взгляд ключевым тут является очень большие трудности в отладке всего этого добра.


Z>Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.


Отлаживать регэкспы очень сложно. Нет дебага/трэйса. Без специальных средств вроде того же RegexBuddy (или как его там), который может визуализировать структуру регекспа — еще сложнее.

Кэр>>Ну и крайне редко приходится создавать свой язык и свою грамматику — так как это чаще всего опять же overkill.


Z>До освоения регулярных выражений мне крайне редко приходилось решать задачи требующие настолько сложный разбор строк. (Тем кому заявления о сложности такого разбора сейчас кажутся смешными, рекомендую попробовать без регэкспов разбрать хотя бы дату и время в нескольких форматах и сравнить объем кода.)


Z>Без удобного инструмента мозг неявно обходит такие задачи, благо в нашем деле почти каждая задача имеет множество удовлетворительных (не путать со школьной оценкой) решений.


Z>То же самое и с удобным описанием грамматики, легкость решения подобных задач спровоцирует мозг на еще один угол зрения на каждую проблему. Я убежден, что задачи для PEG найдутся очень быстро. Разбор различных текстов реально довольно частая ситуация. То, что они часто образуют грамматику мы просто не замечаем. За неимением удобного инструмента кто-то пытается использовать регэкспы, кто-то сразу видит нерегулярность грамматики и пытается обойтись без разбора вообще.


Кто-то просто юзает XML как вид текстового ввода, который не нужно структурировать и не сильно страдает. Очень редко на вход программы попадает сырой текст, который нужно разобрать. А когда попадает, то семантический анализ занимает гораздо большую часть, чем синтаксический — например, как в search engine.

Z>К примеру задачи которые вспомнились легко: разбор сиквела, применение пользовательских фильтров, декларативные правила авторизации. Для всех них я нашел альтернативные решения, либо свел ограничил грамматику регулярной. Хотя все они решились бы гораздо изящнее и были бы мощнее если бы я легко мог создать AST из строки.


Не знаю, не знаю. Я не сильно верю в DSL. Польза от них есть, но и вреда от них тоже немало. Когда DSL работает, то все прекрасно. Решение записывается легко и просто. Когда DSL глючит или его надо менять без потери качества, или нужно просто при парсинга выдавать адекватные ошибки разбора — то это крайне непростая задача. Скажем для записи своего конфига — гораздо лучше и надежнее определить схему XML документа, чем ваять свою грамматику — просто потому что выигрыш в читаемости почти наверняка не покроет затрат на поддержку.

Z>Вопросы как разобрать нерегулярную грамматику с помощью регулярных выражений возникают в .net примерно раз в месяц.


В основном — как распарсить HTML. Иногда как распарсить дату. Для этого нужен FAQ, потому что для этих задач есть стандартные решения, а не поддержка PEG грамматик.
Re[5]: [Голосование] Понимаете ли вы формальные грамматики?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.06.10 07:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, MasterZiv, Вы писали:


>>> С целью сбора статистики. Интересно готов ли народ использовать на

>>> практике подобные вещи. Регекспы, при всей их убогости, используются по

MZ>>Это типа DSL-и строить ?


VD>И они в том числе. PEG или EBNF помогли бы упростить решение массы задач связанных с разбором строк. В прочем, очень часто эти задачи (не осмысленно) являются частью пути программиста к DSL-ям.


Кстати, а что насчет разбора бинарных данных?
Для Regexp в том виде, в котором мы сейчас видим это довольно сложная задача. Во-первых для бинарных нету "классов символов", что делает regex запись громоздкой, во вторых regexp может только вытащить токены, но не преобразовать их в структуру.

Некоторые библиотеки парсер-комбинаторов умеют работать с бинарными данными не хуже чем со строками. Будет ли такая возможность в N?
Re[6]: [Голосование] Понимаете ли вы формальные грамматики?
От: Ziaw Россия  
Дата: 22.06.10 07:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кстати, теперь то ты согласен с тем что этот эффект не сказка придуманная для того чтобы оправдывать свои неудачи?


О чем ты?
Re[4]: [Голосование] Понимаете ли вы формальные грамматики?
От: LaPerouse  
Дата: 22.06.10 07:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, LaPerouse, Вы писали:


LP>>А формальные грамматики реализовывались бы не узкозаточенным инструментом, как вышеприведенные макросы, а на основе той самой семантики (например, путем задания семантического макроса с описанием грамматики). Это было бы фундаментальным решением, а не, пардон, костылем.

VD>Приведи пример этого гипотетического макроса. А то пока что даже не ясно что обсуждать.

А он будет выглядеть точно также, как пример выше, просто вместо узкоспециализированного алгоритма разбора будет работать куда более общий прологовский механизм унификации с bactracking. Например, в прологе есть предикат Add, который позволяет практически один в один переписать твой пример:

append(["foreach", space, "(", expr, space, "in", space, expr, ")", space, expr], string_to_parse)


Так что дергаешь из макроса этот предикат, и все.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[6]: [Голосование] Понимаете ли вы формальные грамматики?
От: Ziaw Россия  
Дата: 22.06.10 07:59
Оценка: +1
Здравствуйте, Кэр, Вы писали:

Z>>Отлаживать регэкспы просто? Я знаю только один способ — тесты, этот же способ один в один работает с грамматиками.


Кэр>Отлаживать регэкспы очень сложно. Нет дебага/трэйса. Без специальных средств вроде того же RegexBuddy (или как его там), который может визуализировать структуру регекспа — еще сложнее.


Все возражения против применимости PEG можно применить и к регэкспам. Однако мало кто рискнет утверждать, что это ненужная часть фреймворка.
Re[3]: [Голосование] Понимаете ли вы формальные грамматики?
От: LaPerouse  
Дата: 22.06.10 08:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, LaPerouse, Вы писали:


VD>>>http://rsdn.ru/poll/2615.aspx
Автор: VladD2
Дата: 17.06.10
Вопрос: Насколько вы понимаете формальные грамматике языков? Например, BNF или PEG.


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]: [Голосование] Понимаете ли вы формальные грамматики?
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.06.10 11:52
Оценка:
Здравствуйте, Ziaw, Вы писали:

VD>>Кстати, теперь то ты согласен с тем что этот эффект не сказка придуманная для того чтобы оправдывать свои неудачи?


Z>О чем ты?


Ты уже забыл в каком разговоре родилась идея NRails?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [Голосование] Понимаете ли вы формальные грамматики?
От: Ziaw Россия  
Дата: 22.06.10 14:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>Кстати, теперь то ты согласен с тем что этот эффект не сказка придуманная для того чтобы оправдывать свои неудачи?


Z>>О чем ты?


VD>Ты уже забыл в каком разговоре родилась идея NRails?


Видимо забыл, какие неудачи имеются ввиду?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.