igor писал(а):
А теперь я жду объяснений. В чём был прикол?
Я серьёзно. Может я смотрю на всё это уже замыленными глазами и не вижу очевидное.
Прошу тогда помочь мне увидеть это нарушение условия детерминированности.
Объяснение первое: Вы решили не ту задачку, которая предложена в упражнении 4.2!!!
Есть формальное определение синтаксиса, и работать надо с ним. Применение "здравого смысла" - это же подгонка под ответ.
Давайте так... Есть у Вирта упражнение 5.1 (которое тоже приведено, чтобы его решали, извлекая для себя при этом новые знания
)
Цитата:
Расширьте программу распознавания РБНФ таким образом, чтобы она генерировала (1) список терминальных символов, (2) список нетерминальных символов и (3) множества начальных (first) и последующих (follow) символов для каждого нетерминального символа
- и все это (обращаю внимание!!!) только исходя из текста "программы", которая в нашем случае - тот самый формальный синтаксис.
Спрашивается, какой список терминалов и нетерминалов выдаст эта программа
Вовсе не тот, что у Вас.
Но мы же взрослые люди, и понимаем, что "здравый смысл", побудивший Вас выкинуть две последние строчки из синтаксиса - действительно является здравым.
Иначе ответ не сойдется.
В этом и прикол: стоит пристегнуть патерны лексики к синтаксису - и получится полный кердык.
И это не мой ведь прикол, это упражнение Вам дал Вирт. Возможно (точно я не знаю) для того, чтобы мы понимали, чего будет, если свалить все в одну кучу.
Объяснение второе: выполнение Вами упражнения, хоть и с другими условиями, имело и так великую пользу, поскольку продемонстрировало, что мы с Вами по разному считаем FOOLOW. Вот я уже два раза по шагам рассказывал как я его считаю, а Вы - нет. А результаты не сходятся.
При этих "объяснениях" выше, я мимоходом посчитал FOLLOW(expression) - сравните, не совпадает ведь
Но это же не дает нам возможность двигаться дальше
Предположим что Вы согласительс п.1 "программы", что мух с котлетами смешивать нельзя. Если не согласитесь, то мы попросим Вас посчитать таки нашу задачу без применения "здравого смысла" - ибо через руки доходит лучше всего.
Но Вы ведь все равно не согласитесь с п.2, я же знаю
И даже знаю как Вы будете не соглашаться: сошлетесь на стр.30, и скажите: "вот же symbol, из него все ясно, все детерминировано, и т.п."
На возражения, что невозможно определить FOLLOW(symbol) - скажите: "да вот он у меня!!!".
А ответы-то у нас разные...
igor, ну критикуйте мое определение для follow, ну все же я рассказал, что мог и умел...
Разве-что одно: нафига мне нужен этот follow...
Он мне нужен, когда при применении 3-го правила эти скобки находятся в конце. Например для factor{factor}
С чем мне сравнивать first от второго factor-а ??? Я сравниваю с follow(term).
А Вы с чем ??? Если ни с чем, то нафиг нам вообще нужен это дурацкий follow ...
Разобраться с этим надо всенепременно. Иначе - клинч.
igor писал(а):
PS: Я пошёл дальше, и нарисовал на листочке графы автоматов, соответствующих этому синтаксису. Если кому то интересно, то я мог бы их оцифровать и выложить
А чего там рисунки
Есть у Вирта следующее упражнение - 4.3
Это уже те же рисунки, но воплощенные в код (кстати говоря, именно эту программу предлагает расширить Вирт в упражнении 5.1). И это уже очень интересно.
Почти боевой бизон
При этом, с целью практичности, можно расширить РБНФ. Например так, как Вы и предлагали: символом char в стиле Оберон, и "диапазоном"
P.S. две точки - вот Вам и недетерминированность, получится. А если бы их было три, получилась бы еще и "откатность" - ужас
P.P.S. Выполненное упражнение 5.1 позволило бы и "третейское судейство": запузыриваешь в нее синтаксис Оберон-0, и сравниваешь результаты с приведенными на ст.57-58