OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 16:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 180 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 09 Февраль, 2010 15:03 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Galkov писал(а):
... (основанное на понимании диаграмм Вирта в стиле Легалова).
Странно... Честно говоря, Легалова я читал по диагонали.
Galkov писал(а):
И это не не я говорю бред, а - Вы (встречная просьба извинить за прямоту) :P
Со стороны это, должно быть, выглядит так, как будто мы говорим друг другу бред, при чём каждый - свой. :lol:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 15:13 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Peter Almazov писал(а):
igor писал(а):
3. Натыкайте меня носом :) в то место в моём файле, из которого следует, что хотя бы одно условие детерминированности нарушено.
Если в файл добавить лексемы > и >= , непонятно почему выкинутые, то FIRST(>)=FIRST(>=).

(Я уже чувствую себя попугаем).

Пожалуйста, посмотрите на условия детерминированности, сформулированные Виртом на странице 29, ещё раз, и скажите, где там написано, что множество First() для ЛЮБЫХ двух лексем не должно пересекаться?

Задумайтесь и вот над чем. Множество всех лексем хоть и не бесконечно, но очень велико, во всяком случае гораздо больше, чем количество элементарных символов, которыми мы располагаем. Если следовать Вашей логике, то получается, что для любого детерминированного синтаксиса число всех лексем не может превышать 256 (с учётом расширенной таблицы ASCII). Разве для Вас не очевидна абсурдность такого утверждения?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 15:34 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
igor писал(а):
Пожалуйста, посмотрите на условия детерминированности, сформулированные Виртом на странице 29, ещё раз, и скажите, где там написано, что множество First() для ЛЮБЫХ двух лексем не должно пересекаться?
Не любых, а альтернативных, т.е. идущих через |. Правило № 1.
igor писал(а):
Задумайтесь и вот над чем. Множество всех лексем хоть и не бесконечно, но очень велико, во всяком случае гораздо больше, чем количество элементарных символов, которыми мы располагаем. Если следовать Вашей логике, то получается, что для любого детерминированного синтаксиса число всех лексем не может превышать 256 (с учётом расширенной таблицы ASCII). Разве для Вас не очевидна абсурдность такого утверждения?
Все лексемы Oberon перечислены в CASE на границе стр. 170-171. Бесконечное множество создают лексемы, начинающиеся на "0".."9" и на "A".."Z","a".."z". Никакой абсурдности нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 16:13 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Можно даже веселее сказать :D

Для LL(1) парсера без детерминированности - "смерть всем китайцам". И главный смыл сканера - сделать возможное количество терминалов для парсера превышающим 256.
А уж то, что "тысяча" (по древнеславянски - тьма) служебных слов будут начинаться с одной буковки - да это сканеру как слону дробина.

И в чем причина жуткого переживания за его "недерминированность" - не понятно совершенно :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 18:06 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
Galkov писал(а):
Для LL(1) парсера без детерминированности - "смерть всем китайцам".
Что это означает - непонятно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 18:19 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Peter Almazov писал(а):
Galkov писал(а):
Для LL(1) парсера без детерминированности - "смерть всем китайцам".
Что это означает - непонятно.

Это означает, что LL(1) без FIRST и FOLLOW просто не работает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 18:32 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Peter Almazov писал(а):
igor писал(а):
Пожалуйста, посмотрите на условия детерминированности, сформулированные Виртом на странице 29, ещё раз, и скажите, где там написано, что множество First() для ЛЮБЫХ двух лексем не должно пересекаться?
Не любых, а альтернативных, т.е. идущих через |. Правило № 1.

... | "<" ["="] | ">" ["="] | ...

Где здесь пересекаются множества First() для альтернатив?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 18:45 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Peter Almazov писал(а):
Все лексемы Oberon перечислены в CASE на границе стр. 170-171.
Кстати, код, приведённый на странице 170, в точности соответствует тому фрагменту продукции, который я только что привёл.
Но почему мы с Вами так по разному видим один и тот же код? :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 18:49 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
igor писал(а):
... | "<" ["="] | ">" ["="] | ...

Где здесь пересекаются множества First() для альтернатив?
Вы изменили грамматику. Это, конечно, похвально, но в таком случае Вы напоретесь на правило № 3. Ибо:
...| "<" ["="] | ">" ["="] | "="|


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 20:44 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Peter Almazov писал(а):
Вы изменили грамматику. Это, конечно, похвально, но в таком случае Вы напоретесь на правило № 3. Ибо:
...| "<" ["="] | ">" ["="] | "="|
Да, нет же. В правиле №3 слова "... и символов, которые могут следовать за K" означают, что могут следовать в самом исходном тексте, а не в тексте продукции, как например в том фрагменте, который Вы привели.

И грамматику я не менял. Она была такая изначально. Но таковой она была в исходных текстах. А в сообщении о КП (например), продукции для лексем, которые мы сейчас рассмотрели, не приводятся. Там все эти лексемы просто перечислены. Мол, есть такие, и всё.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 21:26 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Валерий Лаптев писал(а):
Peter Almazov писал(а):
Galkov писал(а):
Для LL(1) парсера без детерминированности - "смерть всем китайцам".
Что это означает - непонятно.

Это означает, что LL(1) без FIRST и FOLLOW просто не работает.
Ну да, как-то так
Мне кажется, было бы точнее: это означает, что LL(1) без проверок правил Вирта (для проверки которых обязательно нужны и FIRST, и FOLLOW для всех нетерминалов) просто не работает.
Единичка означает, что мелодия угадывается с первой ноты. Если со второй, то это не меньше, чем LL(2)... ну и так далее :)


Peter Almazov писал(а):
Вы изменили грамматику. Это, конечно, похвально, но в таком случае Вы напоретесь на правило № 3. Ибо:
...| "<" ["="] | ">" ["="] | "="|
Все правильно.
Но давайте себя спросим: на какой такой важный вопрос отвечает регулярное выражение для lexeme ???
Ответ: является ли некоторый текст (весь, целиком) одной лексемой.
Спрашивается далее, нафига нам нужен ответ на такой куцый вопрос.
Нам интересно совсем другое: разбивается ли некий текст на последовательность лексем ??? И однозначно ли разбивается ???
А на этот вопрос отвечает уже другое регулярное выражение: program={lexeme}.
И проверка правил Вирта совершенно однозначно определяет однозначность разбиения.

Даже и проверять не буду, настолько предсказуем результат. :lol:
Абсолютно объективный критерий - каждый может проверить сам.



igor писал(а):
3. Натыкайте меня носом :) в то место в моём файле, из которого следует, что хотя бы одно условие детерминированности нарушено.
Дык я тыкал. Без ответа, между прочим :)
Galkov писал(а):
6) Затрону таки нетерминал comment
Ибо нарисован он неправильно, а я об этом уже заикнулся ранее.
Так вот, символ, следующий за {sym} - это "*"
Пересечение sym и "*" - не пусто => правило 3 невыполняется
Но ужас положения не в недерминированности. По большому счету-то, сканеру - пофиг
Вопрос в том, что он будет делать (а он сделает, проблем нет) по такому "заказу"
А он будет делать следующее: встретивши префикс первого комментария, просканирует весь текст (например 100К) до конца, вернется к концу самого последнего комментария (например на -5К), промежуток выкинет нафиг.
Ровно на тех же основаниях, на которых Вы заставляете сканер принимать числовые константы "до упора".
Основания правильные, и называется правило СДЛ.
А патерн - легаловщина :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 21:29 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
igor писал(а):
Да, нет же. В правиле №3 слова "... и символов, которые могут следовать за K" означают, что могут следовать в самом исходном тексте, а не в тексте продукции, как например в том фрагменте, который Вы привели
Контрольный выстрел: а какие символы могут следовать :?:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 21:44 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Galkov писал(а):
Дык я тыкал. Без ответа, между прочим :)
Дык, камнем преткновения стал термин Follow() :), из-за которого всё "тыканье" оказалось не правильным. Позже я пытался объяснить, но безрезультатно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 21:59 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Galkov писал(а):
Контрольный выстрел: а какие символы могут следовать :?:
Вот!!! Вот тот вопрос, ответ на который давно уже будоражит мой мозг :) .

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

Другими словами говоря, ответ на Ваш вопрос даёт правило № 3.

Все учебники кричат о том, что любой НКА можно преобразовать в ДКА (вложенные комментарии с их КС-ной натурой уже "обсасывали", оставим их в покое, чтобы не повторяться). Если язык так же прост, как Оберон, то только идиот станет городить сканер на базе НКА. Сам сканер, со своей стороны вправе рассчитывать на то, что его разрабатывал не идиот. :wink:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 22:09 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Ну я-то методы определения follow расписал подробно как только мог.
А ВЫ - нет. Но говорите, что неправ именно я. Почему-то
Ну и как Вам помочь в этом, если Вы партизаните!!!

Вот в заключение пост. Писал я его на работе, дракона под рукой не было. НО я перечитал дядюшку АхО. И обнаружил у себя неточности:
1) в п.5 для FIRST в правой части не просто FIRST(expr1), а еще и за вичитанием из него преположительно имеющегося там NULL
2) для FOLLOW стартового символа - он не пустой, а содержит EOF, и больше не содержит ничего.

Но ведь не подействовало же !!! Наши определения этого несчастного множества до сих пор отличаются :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 22:21 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
igor писал(а):
Новая доктрина звучит так: не только синтаксис стараются сделать детерминированным для того, чтобы облегчить построение лексического анализатора, но и сам лексический анализатор выполняет разбор исходя из предположения, что синтаксис является детерминированным
Абсолютно неправильная доктрина.
1) Синтаксис делают детерминированным, чтобы с аттрибутными грамматиками башку себе не сломать. И с детерминированным - разберитесь сначала. Плевать при этом хотели на проблемы сканера. Которых и нет к тому же.
2) Не исходит он (сканер) из этого. Потому-что к этому нет никаких технических причин

igor писал(а):
то только идиот станет городить сканер на базе НКА.
Есть иное мнение: только идиот будет изобретать детерминированную версию таких патернов:
Код:
integer      = digit{digit} |      //семантика 1
               digit{hexDigit}"H"  //семантика 2
CharConstant = '"'character'"'|    //семантика 3
               digit{hexDigit}"X"  //семантика 4
string       = '"'{character}'"'   //семантика 5
- когда и с недетерминироваными все просто и понятно.
Кстати, эти патерны я не сам придумал, а переписал из приложения А2

Так кто, Вы говорите, у нас Вирт :?: :lol:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 09 Февраль, 2010 22:58 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Galkov писал(а):
Есть иное мнение: ...
Кажется у меня наступило прозрение :D .
Вернее догадка, в чём корень не понимания.

Работая над своим проектом (в котором есть и сканер, и парсер, и всё остальное :wink: ) я обратил внимание на то, что мне пришлость составить два варианта правил РБНФ: один вариант для спецификации языка, а другой - для реализации сканера и парсера. Эти два варианта отличаются друг от друга, но относятся к одному и тому же языку. Отличия обусловлены тем, что при их составлении ставились совершенно разные цели. В спецификации языка целью было "объяснить пользователю смысл синтаксических конструкций". А в программной документации цель была в том, чтобы "предельно точно специфицировать алгоритм распознавателя".

Так вот! Я всё время в рассуждениях держал в уме РБНФ для сканера и парсера. Мне интересно только это. Я в основном смотрю в исходники, а не сообщение о языке. С самого начала темы я обозначил эту свою позицию, помните (?): "Это слова разработчика". А Вы, судя по приведённым Вами фрагментам РБНФ, пользуютесь исключительно описаниями из сообщения о языке или другими подобными. То есть Вы наивно полагаете, что сканер строится непосредственно по тем РБНФ, которые были приведены их авторами для пояснения смысла синтаксических конструкций.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 01:35 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Galkov писал(а):
один вариант для спецификации языка, а другой - для реализации сканера и парсера
Так я и именно это и говорю - легаловщина: здесь играть, здесь не играть, а здесь рыбу заворачивали.

Galkov писал(а):
А Вы, судя по приведённым Вами фрагментам РБНФ, пользуютесь исключительно описаниями из сообщения о языке или другими подобными.
Вовсе нет
Мне известен LEX-формализм, мне известно что в нем надо записать (например, для КП), и у меня есть инструмент (flex), который может сделать сканер из этой формальной записи - минутное дело.
Но я Вам не могу изложить полную формальную запись (хотя сам формализм-то - уже пытался), пока Вы занимаетесь легаловщиной.
Можно коды и ручками написать - не более чем не сложная техническая задача. Творчества в ней - нуль. День - не больше. Язык кодинга не особенно и важен.

igor писал(а):
То есть Вы наивно полагаете, что сканер строится непосредственно по тем РБНФ, которые были приведены их авторами для пояснения смысла синтаксических конструкций
Дожился до подозрения в наивности :wink:

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

Вот коллеги показывали разные коды для comment.
Они правильные ??? Вообще-то - ДА. А юридически - надо просто проверить на соответствие ТЗ
Не Вашего, естественно. От Вашего (легаловского) - нормальный разработчик должен со стула упасть.
В этом-то и есть квинтэссенция непонимания

_____________________________________________________________________________________________

Вот она, новая генерация ИТ-девелоперов. Ни хрена в самой сути процесса разработки не смыслят, велосипеды изобратают :lol:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 09:18 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 563
Откуда: Москва
igor писал(а):
Galkov писал(а):
Контрольный выстрел: а какие символы могут следовать :?:
Вот!!! Вот тот вопрос, ответ на который давно уже будоражит мой мозг :) .
Новая доктрина звучит так: ...
Ну а что следует-то? В "самом исходном тексте, а не в тексте продукции"?
Не доктрина же следует?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 10 Февраль, 2010 10:47 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Galkov писал(а):
Тут такая фигня - я уже лет эдак 30, как профессиональный Разработчик.
...
Вот она, новая генерация ИТ-девелоперов. Ни хрена в самой сути процесса разработки не смыслят, велосипеды изобратают :lol:
Так вот оно в чём дело! Профессиональный Разработчик с 30-летнем стажем и с предвзятым отношением к ИТ-девелоперам. Это многое объясняет. Теперь для меня со всей очевидностью стало ясно, что я совершенно напрасно надрывался, пытаясь Вам что-то доказать. А я неудомевал, почему Вы решительно игнорировали все мои рассуждения по теме ("Это не доказательства, а витание в облаках было ... Рассуждения словесами."). Теперь всё встало на свои места.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 180 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB