Re[38]: Простота грамматик и простота языка
От: Дарней Россия  
Дата: 17.08.05 08:06
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Это поверхностное понимание того, что такое LL(k)-грамматика. На самом деле, ситуация гораздо глуже, LL(k) ограничение ограничивает также и качество структурных связей языка, т.е. его структурную сложность.


Не совсем понятно. Каким образом ограничивает и что именно?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: Вношу изменения в свой тезис
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 08:08
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, eao197, Вы писали:


E>> На восприятие текста программы влияет намного больше факторов, чем здесь упомянуто.


СГ>Возможно это так, но мне они не известны. Если они известны Вам, то будьте так любезны, сообщите их пожалуйста.


Ну, например, "цель, с которой код программы читается".

Примеры:
-- я хочу понять алгоритм;
-- я хочу оценить примитивную безопасность кода (нет ли деления на ноль, обращения к повисшим/не инициализированным указателям, переполнения, неправильные преобразования типов и пр.);
-- я хочу оценить безопасность кода по отношению к исключениям;
-- я хочу оценить ресурсоемкость кода;
-- я хочу прикинуть приблизительное быстродействие кода;
...
-- я хочу посмотреть, используется ли где-нибудь комментарий:
/* А эти строчки вообще следовало бы выбросить нафиг! */
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Вношу изменения в свой тезис
От: Дарней Россия  
Дата: 17.08.05 08:09
Оценка: +3 :))) :))) :)
Здравствуйте, eao197, Вы писали:

E>Иконка "харакири" есть в планах RSDN Team?


Лучше — оценку с рыдающим смайликом. Давно уже о ней мечтаю
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[39]: Простота грамматик и простота языка
От: mefrill Россия  
Дата: 17.08.05 08:19
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Не совсем понятно. Каким образом ограничивает и что именно?


Качество структурных связей языка. Например, неоднозначностей быть не может. Или больше, определенной ситуации, двух идущих подряд эпсилон-правил. Примеров таких можно привести много. Главное, что проще синтаксическая структура языка.
Re[5]: Вношу изменения в свой тезис
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 17.08.05 08:20
Оценка:
Здравствуйте, eao197, Вы писали:

E>Ну, например, "цель, с которой код программы читается".


Хороший пример.
Чувствую, что скоро мне придется еще больше уточнить свой тезис дополнив его словами, типа:
1) "Если Вы пишите текст для того чтобы....";
2) "Если Вы читаете текст для того чтобы...".
3) "Если Вы хорошо выспались, то..."
4) "Если Вы носите очки, но забыли их дома..."
...
Re[40]: Простота грамматик и простота языка
От: Дарней Россия  
Дата: 17.08.05 08:23
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Здравствуйте, Дарней, Вы писали:


Д>>Не совсем понятно. Каким образом ограничивает и что именно?


M>Качество структурных связей языка. Например, неоднозначностей быть не может. Или больше, определенной ситуации, двух идущих подряд эпсилон-правил. Примеров таких можно привести много. Главное, что проще синтаксическая структура языка.


Но для этого грамматика не обязательно должна быть LL(k), насколько я понимаю.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[3]: Вношу изменения в свой тезис
От: mefrill Россия  
Дата: 17.08.05 08:39
Оценка:
Здравствуйте, eao197, Вы писали:

E>На восприятие текста программы влияет намного больше факторов, чем здесь упомянуто. И простота/сложность грамматики вообще не имеет значения, когда мы хотим понять _смысл_ программы. Еще сложнее, когда мы пытаемся проанализировать программу и представить себе, чем она нам грозит.


Как раз значение имеет, но только как один из факторов. В лингвистике есть такое понятие как наследуемая (копозиционная) семантика. А наследуется семантика (т.е. смысл) из смысла лексем языка. Иначе говоря, мы определяем смысл предложения исходя из смысла слов и синтаксической структуры предложения. Понятно, что чем сложнее синтаксис, тем сложнее понять смысл предложения. Конечно, этим понимание не исчерпывается, смыслов у слов может быть много и смысл предложения зависит как от уже произнесенных ранее предложений, так и от еще непроизнесенных. Т.е. на самом деле, как говорит Кибрик, преложение никогда не заканчивается, поэтому порождающие грамматики Хомского не применимы для анализа естественных языков. Есть еще трудности, когда предложения с одинаковой синтаксической структурой имеют разный смысл несмотря не то, что смысл слов предложения один и тот же. Например, выражение "бить баклуши" имеет двойной смысл и здесь напрушается принцип композиционной семантики. Но синтаксис играет в понимании смысла определяющую роль.

E>Например, возьмем абстрактное выражение:

E>
E>a = b + (c - d)/2;
E>


E>Очевидно, что оно описывается весьма простой грамматикой.


E>Понятен ли нам его смысл?

E>Вряд ли, т.к. не известно, что такое a, b, c, d.
E>Предположим, что это объекты каких-то классов.

Пример неадекватный. Если мы знаем смысл лексем, то определить смысл предложения нам будет тем проще, чем грамматика языка проще. Что значит проще? Я уже писал, что сложность исходного языка определяется сложностью грамматики этого языка. Грамматик у языка может быть бесконечное множество, но мы подразумеваем, что имеем самую простую, определяющую данный язык. Итак, существует иерархия Хомского для грамматик, что определяет качественную структурную сложность языка, т.е. качество его взаимосвязей. Также, можно определить объем грамматики, который определяет количественную сложность языка, выражающуюся в количестве структурных связей языка. Для одинаковых по качественной сложности языков грамматики могут существенно различаться по объему, что, очевидно, также влияет на сложность языков.
Re[41]: Простота грамматик и простота языка
От: mefrill Россия  
Дата: 17.08.05 08:45
Оценка:
Здравствуйте, Дарней, Вы писали:

M>>Качество структурных связей языка. Например, неоднозначностей быть не может. Или больше, определенной ситуации, двух идущих подряд эпсилон-правил. Примеров таких можно привести много. Главное, что проще синтаксическая структура языка.


Д>Но для этого грамматика не обязательно должна быть LL(k), насколько я понимаю.


Насчет LL я не уверен, надо подумать, а вот, чтобы проверить грамматику на неоднозначность, можно построить LR-автомат. Если он будет детермииинированным, то это значит, что грамматика однозначная. Конечно это условие только необходимое, а не достаточное — существуют однозначные грамматики, для которых нельзя построить LR-автомат. Короче, смысл здесь в том, что есть ограничения, которые делают проще синтаксическую структуру языка.
Re[4]: Вношу изменения в свой тезис
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 09:46
Оценка:
Здравствуйте, mefrill, Вы писали:

E>>На восприятие текста программы влияет намного больше факторов, чем здесь упомянуто. И простота/сложность грамматики вообще не имеет значения, когда мы хотим понять _смысл_ программы. Еще сложнее, когда мы пытаемся проанализировать программу и представить себе, чем она нам грозит.


<...пространные объяснения после прочтения поскипаны...>
M>Но синтаксис играет в понимании смысла определяющую роль.

Ну-ну, блажен кто верует.

E>>Например, возьмем абстрактное выражение:

E>>
E>>a = b + (c - d)/2;
E>>


E>>Очевидно, что оно описывается весьма простой грамматикой.


E>>Понятен ли нам его смысл?

E>>Вряд ли, т.к. не известно, что такое a, b, c, d.
E>>Предположим, что это объекты каких-то классов.

M>Пример неадекватный.


Имхо, вполне адекватный.

M> Если мы знаем смысл лексем, то определить смысл предложения нам будет тем проще, чем грамматика языка проще. Что значит проще? Я уже писал, что сложность исходного языка определяется сложностью грамматики этого языка.


Нифига подобного. Добавте в язык поддержку исключений и перегрузку операторов, а попробуйте понять _смысл_ программы.

Возвращаясь к приведенному примеру -- что же это все таки такое?
Может быть сложение целых?
Или комплексных?
Или операции над векторами?
Или над множествами?

Но синтаксис при этом совершенно понятен.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[5]: Вношу изменения в свой тезис
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 17.08.05 09:58
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Возвращаясь к приведенному примеру -- что же это все таки такое?

E>Может быть сложение целых?
E>Или комплексных?
E>Или операции над векторами?
E>Или над множествами?
E>Но синтаксис при этом совершенно понятен.

Ситуация описанная Вами действительно имеет место быть, однако в данной ветке форума обсуждается только синтаксис, а именно влияние характеристик грамматики на легкость синтаксического разбора которое человек осуществляет у себя в голове при чтении текста.
Re[6]: Вношу изменения в свой тезис
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 10:15
Оценка: +6
Здравствуйте, Сергей Губанов, Вы писали:

E>>Возвращаясь к приведенному примеру -- что же это все таки такое?

E>>Может быть сложение целых?
E>>Или комплексных?
E>>Или операции над векторами?
E>>Или над множествами?
E>>Но синтаксис при этом совершенно понятен.

СГ>Ситуация описанная Вами действительно имеет место быть, однако в данной ветке форума обсуждается только синтаксис, а именно влияние характеристик грамматики на легкость синтаксического разбора которое человек осуществляет у себя в голове при чтении текста.


Упс...
Ладно. Но тогда это напоминает абстрактное чтение абстрактных программ абстрактными программистами. Т.е., в переводе на фольклер -- поиск сферического коня в вакууме.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Вношу изменения в свой тезис
От: ansi  
Дата: 17.08.05 10:19
Оценка: 1 (1) +6
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Ситуация описанная Вами действительно имеет место быть, однако в данной ветке форума обсуждается только синтаксис, а именно влияние характеристик грамматики на легкость синтаксического разбора которое человек осуществляет у себя в голове при чтении текста.


Хм, изначально мелькали слова про "смысл", сейчас уже парсеры в голове... Синтаксический разбор в голове — это настолько несущественная мелочь, что даже и смотреть на нее не стоит... Причем доподлинно неизвестно, как этот разбор там (в голове) происходит. Уж деревья точно не строятся Я лично не ощущаю никаких сложностей, когда смотрю на заплюсованный код, как и не становится мне легче, когда я смотрю на паскалевый синтаксис.
Бодяга это все...
new RSDN@Home(1.1.4, 303) << new Message(); std::head::ear << "Therion — Raven of Dispersion";
Re[44]: Так лучше?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка: +1
Здравствуйте, mefrill, Вы писали:

M>А с этим не согласен. Ограничение на грамматику означает ограничение на сложность структуры языка, что в свою очередь, означает ограничение на его сложность при понимании. Поэтому, я бы сказал так: простота и сложность восприятия человеком языка определяется множеством факторов, и в том числе, ограничением на структуру порождающей грамматики языка.


Сама сложность конечно влияет. Но для человека нет необходимости читать код с лева на право. Об этом я и виду речь.

M>Согдасен полностью. Порождающие грамматики — колесо лингвистики. Но, часть сысла вытекает из синтаксической структуры языка. Следовательно, чем сложнее синтаксическая структура языка, тем сложнее понять его смысл (не принимая во внимание другие факторы).


Опять не спорю. Но опять же причем тут LL(1)? Например, введение конекстного ключевого "partial" в C# 2.0 сильно усложнило создание парсера средствами построителей LL(1)-парсеров. Но для человекта никакой сложности нет. Мы легко отличаем где это просто имя идентификатора, а где ключевое слово.

M>И с этим соглашусь. Но, повторюсь, для меня вопрос стоял не в том, что ТОЛЬКО структура грамматики языка определяет его читабельность (иначе бы, маткематические статьи было также легко читать как анекдоты), а в том, что она определяет читабельность (легкость восприятия) в числе многих факторов.


Опять же не буду спорить. Именно многих факторов. И сложность граматики один из них. Но все не так прямолинийно как утвреждает губанов. Требования LL(1) точно не имеют ничего общего с требованиями мозга человека. И объем граматики может оказаться только плюсом если он содержит более ёмкие конструкции (конечно если они интуитивно понятны).
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Простота грамматик и простота языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка: +1
Здравствуйте, mefrill, Вы писали:

M>Не совсем понял, причем здесь EBNF?


При том что EBNF прекрасно подходит для описания регулярных граматик вроде РВ.

M> Что мы сравниваем, легкость чтения EBNF и РВ?


Да.

M> но, какое тогда это отношение имеет к осуждаемому вопросу?


EBNF в отличии от РВ обладает некоторым набором характеристик упрощающим восприятие описания для человека. В то же время РВ значительно проще для распознаования компьюетром.

Ну, а цель этого примера показать, что LL(1)-совместимость недостаточна для того чтобы язык стал простым.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[36]: Простота грамматик и простота языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Вот, например, введение в язык оператора цикла с параметром: for( ; ; ) {}. Ну кто может жогадаться, что третья конструкция должна выполняться ПОСЛЕ исполнения тела цикла? Дя человека гораздо естественнее было бы что-то типа for( ; ) {}(поститерация). Но мы воспринимаем сейчас эту неестественную конструкцию как само собой разумеещуюся.


В том то и дело, что привыкли. Как я уже говорил, привыкнуть можно к чему угодно. Но зачем привыкать к плохому.

Есть же и Паскаль с прямолинейным и простым синтаксисом. И разеные Питоны с Руби где проблема for решена изумительно.

Как тебе вот такое решение:
foreach (int i in 0..2..100)
    ...

foreach (int i in Generator(start = 0, end = 100, step 3))
    ...

То есть вообще избавиться от императивного задания выполнения, а вместо этого задавать нужную информацию декларавтивно.

M> Размещение указателя на конструкцию в заключительной метке блока "end метка" традиционно решается форматированием и не засоряет код программы мусором. В общем, Оберон кажется сложнее для чтения именно из-за противостояния сишной традиции, которая есть, на смаом деле, традиция программисткого сообщества. И здесь, конечно, сложность грамматики отходит на второй план.


+1

M>Но, если ставить вопрос обощенно, то несоменно, при прочих равных условиях, язык, определяемый LL(1)-грамматикой, читать легче, нежели язык, определяемый КС-грамматикой без ограничений.


И все же я думаю, что на читаемость намного больше влияют другие фактроы.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: Простота грамматик и простота языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Здравствуйте, Дарней, Вы писали:


Д>>Поэтому значение имеет только узнаваемость отдельных конструкция языка. Которая абсолютна ортогональна величине значения k в LL.


M>Это поверхностное понимание того, что такое LL(k)-грамматика.


Э... LL(k) и LL(1) все же разыне вещи. LL(*) так вообще может описать почти все что нужно для ЯП.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Простота грамматик и простота языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Качество структурных связей языка. Например, неоднозначностей быть не может.


Неоднозначностей может не быть и в не LL(1)-языке. В том же Шарпе не мало усилий было приложено на решение всех неоднозначностей.

M> Или больше, определенной ситуации, двух идущих подряд эпсилон-правил. Примеров таких можно привести много. Главное, что проще синтаксическая структура языка.


Не факт. Ты говоришь не о реальных языках, а о потенциальных возможностях. Вот в С++ действительно много неоднозначностей, что усложняет чтение коднов на нем. И то не всегда. А в Шарпе неоднозначностей (не разрешенных) нет. И получается, что при не совместимой с LL(1)-граматикой при том еще и довольно обемной код все же читается очень просто. Наличие же высокоуровневых конструкций хотя и усложныет краматику и семантику, но чтение только упрощает.

Прицип тут простой. Декларация понятнее императивного описания более низкоуровневыми средствами. А чтобы добиться большей декларативности унжно или иметь некие очень не простые механизым ее достижения, либо расширять и усложнять грамматику чтобы впихнуть в нее эти декларативные конструкции.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: Простота грамматик и простота языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка:
Здравствуйте, jazzer, Вы писали:

J>2) параноидальной честностью


Круто! Надо будет запомнить.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[41]: Простота грамматик и простота языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка: +2
Здравствуйте, mefrill, Вы писали:

M>Ага, эти ученые, они же просто придурки все, сумасшедшие. (крэзи саенсист)


Не обижайся. Разные бывают люди.

Но, кстати, не раз замечал, что у действительно талантливых людей частенько бывает сдвиг по фазе в том или ином направлении.

Видимо то что в одном применении является гениальным, в другом является совершенно не практичным. Мыслит человек по другому... Это позволяет ему увидеть то, что не видят другие. Но и то что другие видят он может не заметить или не понять. Селявя.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Грамматик регулярных выражений и проч.
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка: 12 (2)
Здравствуйте, Mamut, Вы писали:

M>Усложняем. Находим все HTML тэги в документе:

M>
M>Данные: <TAG[^>]*>(.*?)</TAG> (запись частично использует РВ)

Это не верная граматика. Например, она неверно распознает ХТМЛ вроде:
[c#]
<p id="a>">
[/c#]

M>Программа: <([A-Z][A-Z0-9]*)[^>]*>(.*?)</\1>
M>


Опять же очень упрощенная версия. Рельный регексп займет пол экрана и прочесть его будет ооОочень не просто.

Так что все намного сложнее. И мменно тут прекрасно проявляют себя более читаемые краматики вроде EBNF. Ввел правило писывающее строку и пиши на его базе другие:
Tag      = '<' idenifier { Attribut } '>' { Tag | Text } '<' '/' idenifier '>'.
Attribut = idenifier [ '=' ( String | idenifier | Number ) ].
...

Вроде как длиннее. Вроде как сложнее. Но, что характерно, читается наааАаамного лучше.

Вопрос почему? Да все те же принципы:
1. Имеются средства структурирования — правила.
2. Паттерны текста хорошо отличаются от управляющих конструкций и правил. И их не нужно эскейпить.
3. Элементы граматики хорошо выделятся в тексте и могут быть отформатированы пробелами, табуляциями и концами строк для большей читаемости.
4. Производится абстрагирование от не важных вещей вроде пробелов.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.