OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 16 Декабрь, 2018 12:01

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




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: Воскресенье, 02 Май, 2010 07:10 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
На странице 21 описан пример, показывающий структуру выражений. Используются символы E, T, F, V. Далее введённый синтаксис проиллюстрирован примером из трёх синтаксических деревьев. Я не понял, откуда на картинках взялась буква A?

Кроме того, там задан следующий синтаксис:
Цитата:
E = T | "+" T.
T = F | T "*" F.
F = V | "(" E ")".
V = "a" | "b" | "c" | "d".
После этого в качестве примера предлагается формула "a * b + c". Но согласно определению E символ "+" не может встретиться после произведения. Он может быть только первым символом, либо идти сразу после "(" (см. определение F).
Полагаю, должно быть E = T | E "+" T.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 08:08 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
На стр. 25 в последнем примере упражнения 2.1 используется жирный символ V. Поскольку используется он на месте оператора, то я полагаю, что это логическая дизъюнкция, а не переменная. Однако, в определении синтаксиса на стр. 24 этот символ не встречается. Аналогичная ситуация с символом "?", который присутствует в примере, но отсутствует в РБНФ.

В примере нет пробелов вокруг символов ">", "-", а также после символов "*" и логического отрицания. Перед символом отрицания, похоже, два пробела.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 08:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Стр. 28 писал(а):
Если очередное состояние уникально, то машина состояний является детерминированной, иначе недетерминированной.
Вызывает сомнение выделенное слово. Уникальное состояние - это состояние, никогда не повторяющееся. Здесь же имеется в виду скорее однозначно определённое состояние.

Got 1337?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 08:50 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Стр. 31 писал(а):
WHILE -R.eot & ...
Похоже, в исходник вместо тильды затесался минус. Здесь же в листинге в двух местах пробел затесался перед символом ";": после WHILE и после IF. Здесь же явно в обоих случаях присваивается id[i] := OX вместо 0X.

На стр. 32 картинка к упражнению 3.1 "грязная". Видны артефакты от кодирования в JPEG. Неужели нельзя было PNG или BMP?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 09:37 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Поскольку решений к упражнениям в книге не нашёл, попробую здесь спросить.
Стр. 25, упр. 2.1, последний пример:
Вложение:
1a.png
1a.png [ 18.53 КБ | Просмотров: 6678 ]
Стр. 32, упр. 3.1:
S1 = "a(x" { "ox" } ")".
S2 = "a" { "+" ( "b" | { "c*" } ) } ".".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 11:21 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Стр. 36, РБНФ. В продукции syntax лишний пробел перед точкой. В продукции factor после одного из символов "|" нет пробела.

Стр. 37, листинг. В процедуре production лишний пробел перед ";" после IF.
В процедуре syntax вызывается процедура prodиction.
В процедуре Compile есть присваивание "lastpos := o;" (буква вместо цифры, причём в нижнем регистре).

Стр. 39, РБНФ. В продукции term нужны пробелы вокруг "|".

Стр. 42, упр. 4.1, РБНФ. В продукции variable нужен пробел перед между ident и "[".

Стр. 43, упр. 4.2, РБНФ. В продукции factor:
- кажется, есть лишний пробел между id и string;
- в двух местах нужен пробел после |;
- пропущен | между ")" и "[".
Там же, в продукции id лишний пробел: "lette r".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 14:58 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1338
вы о печатном или электронном варианте говорите?
и где последний взяти?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 15:00 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Wlad2 писал(а):
вы о печатном или электронном варианте говорите?
О печатном.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 15:49 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
А можно в wiki поместить список опечаток - чтобы всё было в одном месте?
И аналогично - по второй книжке Вирта.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 16:01 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Сергей Прохоренко писал(а):
А можно в wiki поместить список опечаток - чтобы всё было в одном месте?
А я думал, что здесь - "одно место".
А здесь - второе.


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

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Александр Ильин писал(а):
Стр. 28 писал(а):
Если очередное состояние уникально, то машина состояний является детерминированной, иначе недетерминированной.
Вызывает сомнение выделенное слово. Уникальное состояние - это состояние, никогда не повторяющееся. Здесь же имеется в виду скорее однозначно определённое состояние.
Пожалуй, не соглашусь с Вами. Слово "уникально" здесь очень хорошо подходит по смыслу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 18:36 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
igor писал(а):
Пожалуй, не соглашусь с Вами. Слово "уникально" здесь очень хорошо подходит по смыслу.
Есть ещё слово "единственно".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Май, 2010 19:00 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Александр Ильин писал(а):
Есть ещё слово "единственно".
"Единственно" - это когда других состояний вообще нет. А "уникально" - это когда другие состояния всё-же есть, но они другие.

Пусть система находится в каком-либо состоянии. Очередной прочитанный символ переводит систему в новое состояние. Причём, если был прочитан символ "А" (условно), то это одно новое состояние, а если "Б" - другое. То есть новое состояние в общем случае не единственно.

Если же разные символы могут переводить систему в одно и то же новое состояние (не уникальное для каждого символа), то эта машина состояний является недетерминированной.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 03 Май, 2010 11:45 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Стр. 48, наверху, продукция term(v0): нет пробела возле одного из символов "|".

Стр. 53, РБНФ Оберон-0:
- SimpleExpression: нет пробелов вокруг двух символов "|";
- ActualParameters, module: лишний пробел перед точкой.
Далее, код модуля Sample. Лишние пробелы перед символами ";":
- в процедуре Multiply - после IF и после WHILE;
- в процедуре Divide - после обоих WHILE;
- в процедуре BinSearch - после обоих WHILE.
В процедуре BinSearch непоследовательно использованы пробелы вокруг "+": надо добавить пробелы в "(i+j)" и "k+1".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Май, 2010 04:25 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Что-то я не понял, зачем в конце приложения C.1 (исходники лексического анализатора) присутствует куча вызовов EnterKW (null, "...")? Фактически тут перечислены ключевые слова, которые не используются в языке Оберон-0 (NIL, IMPORT и т.п.). Это, очевидно, следы от конвертации обычного компилятора Оберон в Оберон-0. Надо было просто удалить эти лишние ключевые слова и не вводить читателя в заблуждение относительно их необходимости в анализаторе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Май, 2010 04:47 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
На стр. 62 есть следующий исходник:
Код:
LOOP (*синхронизация*)
   IF sym < ident THEN Mark("идентификатор?"); ... END;
      Statement;
      IF sym = semicolon THEN Get(sym)
      ELSIF sym IN follow(StatSequence) THEN EXIT
      ELSE Mark("точка с запятой?")
   END
END
Предпоследний END выровнен так, будто он относится к первому IF'у, на самом же деле он относится к ELSE. Попробовал переписать через WHILE:
Код:
IF sym < ident THEN Mark("идентификатор?"); ... END;
Statement;
WHILE (sym = semicolon) & ~(sym IN follow(StatSequence)) DO
   IF sym = semicolon THEN Get(sym)
   ELSE Mark("точка с запятой?")
   END;
   IF sym < ident THEN Mark("идентификатор?"); ... END;
   Statement
END
После этого возникли сомнения в правильности расстановки END'ов в оригинальном LOOP. Ведь получается, что у нас за одну итерацию цикла может выполниться два Mark'а. Может быть, я неправильно составил WHILE?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Май, 2010 14:46 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
На стр. 67 приведён листинг процедуры NewObj. Завершающий END у процедуры имеет неправильный регистр: "End" вместо "END".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Май, 2010 17:00 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1537
Откуда: Беларусь, Минск
Александр Ильин писал(а):
Стр. 28 писал(а):
Если очередное состояние уникально, то машина состояний является детерминированной, иначе недетерминированной.
Вызывает сомнение выделенное слово. Уникальное состояние - это состояние, никогда не повторяющееся. Здесь же имеется в виду скорее однозначно определённое состояние.
Да, а задаётся оно уникальностью перехода, а не состояния. То есть, машина детерминированная, когда событие, вызвавшее переход, приводит всегда в одно и то же состояние. Наверно, так.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Май, 2010 17:06 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1537
Откуда: Беларусь, Минск
Александр Ильин писал(а):
зачем в конце приложения C.1 (исходники лексического анализатора) присутствует куча вызовов EnterKW (null, "...")?
Наверное, чтобы запретить использовать данные слова в качестве идентификаторов переменных. Тогда в будущем можно будет расширить компилятор, и программы на изначальном языке будут без переписывания компилироваться и на новом компиляторе.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 06 Май, 2010 07:14 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2289
Откуда: Россия, Санкт-Петербург
Внизу стр. 71, третья строка снизу: нет пробела перед ":" и после "type" в комментарии.
Последняя строка, нет пробела после "=".

Стр. 72, третья строка сверху: должно быть "obj" вместо "Obj", нет пробелов вокруг ":=".
В процедуре IdentList должно быть "NewObj" вместо "New Obj", там же нет пробела после запятой.
В той же процедуре цикл WHILE не выровнен (три строки нужно сдвинуть на один уровень влево), а в строку "IF sym=ident..." нужно добавить 4 пробела: два вокруг пробела и по одному после запятой и ";".
В процедуре Type1 в строке "IF (sym = number)..." не нужны скобки в условии, и далее нужно поставить пробелы вокруг ":=" в "n:=1". В следующей строке "IF sym = of..." после END нужно убрать пробел.
Последние три строки на странице нужно сдвинуть вправо на один уровень (содержимое цикла WHILE и завершающий END не выровнены).

Стр. 73, первая строка: лишний пробел между END и ";".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4  След.

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


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

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


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

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