OberonCore https://forum.oberoncore.ru/ |
|
Детерминированность лексики Оберона https://forum.oberoncore.ru/viewtopic.php?f=61&t=2279 |
Страница 4 из 9 |
Автор: | Peter Almazov [ Воскресенье, 31 Январь, 2010 16:11 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Здесь слово сканер - это моя отсебятина, классик (Galkov) говорил "лексика". Я этим словом обозначил, что речь идет о синтаксисе для сканера, а не для парсера. Так что речь идет именно о теории, а не о конкретном сканере. |
Автор: | igor [ Воскресенье, 31 Январь, 2010 16:25 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Peter Almazov писал(а): Здесь слово сканер - это моя отсебятина, классик (Galkov) говорил "лексика". Хм... Интересно.Я этим словом обозначил, что речь идет о синтаксисе для сканера, а не для парсера. Так что речь идет именно о теории, а не о конкретном сканере. Тогда можно говорить о двух эквивалентных лексиках языка. Одна - это та, которая описана в "Сообщении о языке". А другая - та, по которой "шпарит" конкретный сканер. Относительно лексики, которая в сканере, похоже разногласий нет, и все согласны, что она там детерминированная. |
Автор: | Galkov [ Воскресенье, 31 Январь, 2010 19:19 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Сергей Оборотов писал(а): В общем случае - нет. Где он об этом сказал? Если я еще не потерял мысль в этом тасовании колоды постов, то речь идет о том, что Вирт не сказал, что регулярные языки являются обязательно детерминированными.Правильно ??? Да, не сказал. Но мне представляется более значительным, что он не сказал и обратного (что в общем случае - нет). Тут, правда, я могу говорить лишь о русском варианте, но который читал очень внимательно. Поставьте себя на место студизо, который первый раз, и именно здесь, прочитал определение регулярного синтаксиса. Будет ли у него правильное понимание после прочтения ??? Мне кажется - не факт. Про себя скажу: по первому разу запутался. Азы читал давно, а по жизни меня больше интересует генерация кода из графической схемы, чем из текста. Не, ну вспомнил, конечно же. Но у меня таки была первичная подготовка, а каково бедному студиозо ??? Сергей Оборотов писал(а): Вообще-то понятно что имелось в виду, но сказано коряво. Ну вот, уже более конкретно.Сергей, мне непонятно, в чем заключается корявость. Поясните пожалуйста. Или как это должно сказать не коряво... Пока мне кажется все нормальным. Если, конечно у нас одинаковое понимание термина "лексика" Но именно это и есть предмет обсуждение в топике. Как мне кажется... Несмотря на его сегодняшнее название |
Автор: | Galkov [ Воскресенье, 31 Январь, 2010 19:42 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
igor писал(а): Относительно лексики, которая в сканере, похоже разногласий нет, и все согласны, что она там детерминированная Ну если все согласны, тогда у меня ко всем абсолютно конкретное предложение - проверить правила Вирта для следующего синтаксиса (это из упражнения 4.2, с исправлением опечаток)Код: syntax = {production}. - в конце концов, почему я один должен бодаться за правду.production = id "=" expression ".". expression = term {"|" term}. term = factor {factor}. factor = id | string | "(" expression ")" | "[" expression "]" | "{" expression "}". id = letter {letter | digit}. string = """ {character} """. Здесь лексика не выделена, а включена в синтаксис. Если она детерминирована, значит правила Вирта для этого синтаксиса выполняются. Вопрос даже не в моем мнении: выполняются или нет - это просто медицинский факт. Для установления которого надо просто уметь считать. Я умею (настаиваю на этом) - не выполняются. Поскольку я уже немного устал, то деликатничать не буду: у кого не выполнится, тот не умеет считать. Скажу даже еще менее деликатно: я могу допустить такие пенки в упражнении - типа пусть студиозо помучается, умнее станет. Но ведь те же пенки в Приложениях А1 и А2. И считаю это не совсем допустимым. Точнее - совсем недопустимым Вот Вам и весь сказ |
Автор: | Peter Almazov [ Воскресенье, 31 Январь, 2010 20:52 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Galkov писал(а): Код: expression = term {" " term}. expression = term {"|" term}. ? |
Автор: | Galkov [ Воскресенье, 31 Январь, 2010 21:55 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Спасибо коллега, в книге эта строчка правильно нарисована. Там в строке factor аналогичные "пропуски палок" А я скопировал (и поправил factor) из Упражнения.txt на диске. И попался ((выше поправил)) |
Автор: | Сергей Оборотов [ Воскресенье, 31 Январь, 2010 23:14 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Galkov писал(а): Правильно ??? Да, не сказал. Но мне представляется более значительным, что он не сказал и обратного (что в общем случае - нет). Тут, правда, я могу говорить лишь о русском варианте, но который читал очень внимательно. Поставьте себя на место студизо, который первый раз, и именно здесь, прочитал определение регулярного синтаксиса. Будет ли у него правильное понимание после прочтения ??? Да, правильно. Если это написано в "Конструировании компиляторов" и получилось сделать у Вирта то может получиться и у студента, который будет это пособие читать. Как-то так. Galkov писал(а): Сергей, мне непонятно, в чем заключается корявость. Поясните пожалуйста. Или как это должно сказать не коряво... Нет, не одинаковое. Лексика - следствие определения, а недетерминированность - конструирования.
Пока мне кажется все нормальным. Если, конечно у нас одинаковое понимание термина "лексика" Но именно это и есть предмет обсуждение в топике. Как мне кажется... Несмотря на его сегодняшнее название |
Автор: | igor [ Понедельник, 01 Февраль, 2010 07:21 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Galkov писал(а): igor писал(а): Относительно лексики, которая в сканере, похоже разногласий нет, и все согласны, что она там детерминированная Ну если все согласны, тогда у меня ко всем абсолютно конкретное предложение - проверить правила Вирта для следующего синтаксиса (это из упражнения 4.2, с исправлением опечаток) |
Автор: | Galkov [ Понедельник, 01 Февраль, 2010 08:17 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
И причем здесь за рыбу деньги Есть упражнение, в котором написано: Цитата: Определить множества символов FIRST и FOLLOW для конструкций РБНФ production, expression, term и factor. Используя эти множества, проверить, что РБНФ является детерминированной. Проверить-то можно, или нельзя В конце концов, упражнения даются, чтобы их делать. Вот я - сделал, А Вы - нет. Но при этом Вы мне говорите, что это я говорю ерунду про недетерминированность. А по моему, так - наоборот. Кто-то разве говорит, что некие коды сделаны неправильно Чего Вы так распереживались, непойму. Как будто, сказавши НКА, отобрали тем самым веру в Деда Мороза. Нормальные коды. Просто сделаны они не совсем из тех правил, которые даны Виртом для детерминированного синтаксиса. |
Автор: | igor [ Понедельник, 01 Февраль, 2010 10:01 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Galkov писал(а): В конце концов, упражнения даются, чтобы их делать. Вот я - сделал, А Вы - нет. Всё! Иду выполнять Ваше предписание. Вечерком отпишусь (постараюсь). |
Автор: | Peter Almazov [ Понедельник, 01 Февраль, 2010 13:36 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Не нашел там никакой недетерминированности. Причем, все упрощается тем, что ни одна конструкция (кроме самой верхней) не может породить пустую последовательность. Надо "сверить часы" - где там недерминированность? |
Автор: | Galkov [ Понедельник, 01 Февраль, 2010 14:04 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Ну давайте, попробуем. С igor вот не получилось (хотя я еще не теряю надежды), потому что у нас разное понимание основы по фамилии patern matching. Вот он вроде говорит "что-то в этом есть" - но это же не может быть базой для дальнейшего продвижения... А он молчит Щаз. С пол-часика уйдет наверное... |
Автор: | Valery Solovey [ Понедельник, 01 Февраль, 2010 14:06 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Цитата: Определить множества символов FIRST и FOLLOW для конструкций РБНФ production, expression, term и factor. Используя эти множества, проверить, что РБНФ является детерминированной. FIRST(id) = char, FOLLOW(id) = char | digit. FIRST(string) = <">, FOLLOW(string) = char | <">. У нетерминалов, естественно, FIRST() нет. |
Автор: | Galkov [ Понедельник, 01 Февраль, 2010 14:29 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
1) Нетерминал id. Проверяем правило 3 для "повторения". Для этого необходимо, чтобы FIRST(letter|digit) непересекался с FOLLOW(id) 2) Ищем вхождения id в синтаксис - это только нетерминал factor. Из чего делаем заключение, что FOLLOW(id)=FOLLOW(factor). 3) Ищем вхождение factor в синтаксис - это нетерминал term. Первое вхождение factor в term говорит о том, что FOLLOW(factor)=FIRST(factor)+FOLLOW(term). Второе слагаемое возникло от применения правила 2, ибо FIRST({factor}) содержит в себе пустышку. 4) Можно не анализировать далее второе вхождение factor в term, и FOLLOW(term) - они только расширят множество FOLLOW(factor). Вполне достаточно уже того, что FIRST(factor)=FIRST(ident)+"""+"("+"["+"{" и FIRST(letter|digit) - пересекаются Ну и все, типа - кердык Просьба критиковать. Желательно не все сразу, а по отдельным утверждениям. А я буду сопротивляться Да, вот: плюсик я тут употреблял как обединение множеств... |
Автор: | Valery Solovey [ Понедельник, 01 Февраль, 2010 15:12 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
А разве id - нетерминал? Чёрт, забыл. Galkov писал(а): 2) Ищем вхождения id в синтаксис - это только нетерминал factor. Из чего делаем заключение, что FOLLOW(id)=FOLLOW(factor). Приравнивать входные сиволы нельзя. Просто, factor - это другой Уровень. Его входными элементами являются сами id. Целиком, а не его составляющие.Возможно, я выразился слишком туманно, поэтому воспользуюсь аналогией. В хлебный магазин утром специальная машина привозит хлеб. Буханки переносят в магазин и время от времени подкладывают на полки. Все довольны. И так будет длиться до тех пор, пока машина привозит хлеб, а не его составляющие. Магазинщикам будет далеко не весело, если в фургоне обнаружится гора злаков, политая маслом и перемешанная с солью. Аналогия про недетерминированность. Если разложить в порядке убывания массовых долей ингредиенты кекса и чёрного хлеба, то получится, что и там, и там первое место занимает мука (FIRST(id)). Но этот факт нам не мешает в магазине отличить первое от второго. А всё потому, что магазин (factor) принимает уже готовые кексы и хлеб (id). |
Автор: | igor [ Понедельник, 01 Февраль, 2010 15:59 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
igor писал(а): Вечерком отпишусь (постараюсь). Выполняю обещанное.Итак, разбираем упражнение 4.2 из книги Вирта. Множество абстрактных терминальных символов: {id, string, "=", ".", "|", "(", ")", "[", "]", "{", "}"} Множество нетерминальных символов: {syntax, production, expression, term, factor} FIRST(production) = {id} FOLLOW(production) = {id, string, "=", ".", "|", "(", ")", "[", "]", "{", "}"} FIRST(expression) = {id, string, "(", "[", "{"} FOLLOW(expression) = {id, string, "|", "(", ")", "[", "]", "{", "}"} FIRST(term) = FIRST(expression) FOLLOW(term) = FOLLOW(expression) FIRST(factor) = FIRST(term) FOLLOW(factor) = FOLLOW(term) Ну, а теперь множество моих комментариев: 1. Так как в правых частях продукций есть нетерминалы, то этот синтаксис относится уже к классу контекстно-свободных языков, а не регулярных. Здесь мы несколько отошли от темы топика, но я думаю, что это не страшно, можно продолжить обсуждение в этой теме (на усмотрение модераторов). 2. Раз мы перешли к рассмотрению абстрактных терминальных символов, то забудьте про letter, digit и прочую лексику. Терминальные символы (абстрактные или элементарные) рассматриваются как неделимые. На всякий случай перечитайте страницу 30, где Вирт говорит о двух этапах определения синтаксиса. 3. Никаких нарушений условий детерминированности в примере 4.2 я не обнаружил. Да, множество FIRST для приведённых нетерминалов пересекаются. Ну и что? Никакого криминала в этом нет. Попробую последний пункт пояснить. Рассмотрим для определённости нетерминалы production и factor. И тот, и другой может начинаться с терминала id. Но в приведённом синтаксисе нигде не встречается конструкция вида K = term0 | term1, в которой production и factor выступали бы в роли term0 и term1, соответственно. То же самое можно сказать про конструкцию вида K = fac0 fac1 и про любую пару нетерминалов. А теперь я жду объяснений. В чём был прикол? Я серьёзно. Может я смотрю на всё это уже замыленными глазами и не вижу очевидное. Прошу тогда помочь мне увидеть это нарушение условия детерминированности. PS: Я пошёл дальше, и нарисовал на листочке графы автоматов, соответствующих этому синтаксису. Если кому то интересно, то я мог бы их оцифровать и выложить. |
Автор: | Valery Solovey [ Понедельник, 01 Февраль, 2010 16:24 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
igor писал(а): 1. Так как в правых частях продукций есть нетерминалы, то этот синтаксис относится уже к классу контекстно-свободных языков, а не регулярных. Здесь мы несколько отошли от темы топика, но я думаю, что это не страшно, можно продолжить обсуждение в этой теме (на усмотрение модераторов). В правой части автоматной грамматики может содержаться нетерминал. Самое главное, чтобы это был не тот же самый нетерминал, что и слева. Другими словами, не должна появляться рекурсия.Но это так, комментарий в сторону. |
Автор: | igor [ Понедельник, 01 Февраль, 2010 16:32 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Valery Solovey писал(а): В правой части автоматной грамматики может содержаться нетерминал. Да, Вы правы. Спасибо. Принципиальное значение имеет можно ли их исключить подстановками. А что Вы можете сказать по поводу моего разбора упражнения 4.2? У Вас есть какие-нибудь возражения или дополнения? |
Автор: | Peter Almazov [ Понедельник, 01 Февраль, 2010 16:40 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Galkov писал(а): Здесь лексика не выделена, а включена в синтаксис. Это, видимо, не так. В противном случае, что означает следующая строка:term = factor {factor}. ? Здравый смысл говорит нам, что реализация может выглядеть так: Аа Вв Однако разделитель НИГДЕ НЕ УПОМЯНУТ и такая запись недопустима! Аа|Вв - так можно, а так Аа Вв - нельзя! Вообщем, тут лексика тоже должна быть отделена, иначе сам черт ногу сломит. |
Автор: | igor [ Понедельник, 01 Февраль, 2010 16:51 ] |
Заголовок сообщения: | Re: Детерминированность лексики Оберона |
Galkov писал(а): Здесь лексика не выделена, а включена в синтаксис. Здесь к лексике относится только это: Код: id = letter {letter | digit}. Лексемы - это и есть абстактные терминальные символы.
string = """ character """. |
Страница 4 из 9 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |