Варианты заданий (1114804), страница 12
Текст из файла (страница 12)
Стек очищаем и заносим в негооткрывающую круглую скобку.2. Теперь рассматриваем текущий элемент выражения (пока таковыеесть).60• Если этот элемент – операнд (переменная или константа), выписываем его в качестве очередного элемента ПОЛИЗа.• Если этот элемент – открывающая скобка, заносим ее в стек.• Если этот элемент – закрывающая фигурная скобка, извлекаем элементы из стека и выписываем их в качестве очередныхэлементов ПОЛИЗа до тех пор, пока на вершине стека не окажется открывающая скобка. Ее также извлекаем, но в ПОЛИЗне записываем.• Наконец, если этот элемент – символ операции, то:– если на вершине стека находится открывающая скобка, либоесли приоритет операции на вершине стека меньше приоритета текущей операции, заносим текущую операцию в стек;– если, напротив, на вершине стека находится операция, имеющая такой же или более высокий приоритет, чем текущая,то извлекаем операцию из стека, выписываем извлеченнуюиз стека операцию в качестве очередного элемента ПОЛИЗа, а текущую операцию снова сравниваем (возможно, чтоиз стека будет в итоге извлечено больше одной операции).Когда операции такого же или более высокого приоритетана стеке кончились, заносим текущую операцию в стек.3.
Когда выражение полностью считано (больше нерассмотренных элементов нет), извлекаем элементы из стека и выписываем их в качествеочередных элементов ПОЛИЗа до тех пор, пока на вершине стека неокажется открывающая скобка. Ее также извлекаем, но в ПОЛИЗ незаписываем.4. Проверяем, что стек пуст. Если он не пуст, это свидетельствует оналичии в выражении незакрытой скобки. Заметим, что, если стекопустел раньше, чем кончилось выражение,– это, напротив, означает,что в выражении больше закрывающих скобок, чем открывающих.Например, трансляция выражения a − b + c ∗ d будет происходить следующим образом:— Помещаем в стек скобку— выписываем операнд a— помещаем в стек минус— выписываем операнд b— поскольку приоритет плюса не выше приоритета минуса, извлекаемиз стека и выписываем минус (теперь ПОЛИЗ содержит a b−)61— поскольку на вершине стека опять скобка, заносим в стек плюс— выписываем операнд c (теперь ПОЛИЗ содержит a b − c)— поскольку на вершине стека сейчас плюс, а очередной элемент выражения – знак умножения, и поскольку умножение имеет более высокий приоритет, чем сложение, заносим умножение в стек (теперь стексодержит умножение, плюс и скобку)— выписываем операнд d, получаем ПОЛИЗ a b − c d— поскольку выражение закончилось, выбираем из стека по одному элементы, пока не встретим скобку; таким образом, выбираем и выписываем сначала умножение, потом сложение и получаем ПОЛИЗab−cd∗+— извлекаем из стека скобку; поскольку после этого стек оказался пусти наше выражение тоже пусто, трансляция прошла успешно.4.7Рекомендации попроектированиюобъектно-ориентированномуЧтобы оценить, насколько удачно вы спроектировали иерархию классов,ответьте на несколько вопросов:— Есть ли в ваших классах общее поле, обозначающее тип объекта?— Есть ли хотя бы в одном из классов открытое (public) поле (не функция)?— Есть ли в ваших классах поля с модификатором static?— Пришлось ли при работе с вашими классами (как внутри методов,так и вне их) хотя бы один раз использовать оператор switch?Если хотя бы на один вопрос вы ответили положительно, стоит еще подумать над проектированием иерархии.62Список литературы[1] Ч.
Уэзерелл. Этюды для программистов. пер. с английского. М.:Мир,1982.[2] А. М. Робачевский. Операционная система UNIX. Изд-во «BHV–Санкт-Петербург», Санкт-Петербург, 1997.[3] У. Р. Стивенс. UNIX. Разработка сетевых приложений. М.:Изд-во «Питер», 2004.[4] Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++. Второе издание. М.:Изд-во «Бином», 1999.[5] И. А. Волкова, Т. В. Руденко. Формальные грамматики и языки. Элементы теории трансляции. Второе издание. М.: Издательский отделВМиК МГУ, 1999.[6] William H.
Press, Brian P. Flannery, Saul A. Teukolsky, William T.Vetterling. Numerical Recipes in C: The Art of Scientific Computing. NewYork: Cambridge University Press, 1992 (2nd ed.)63СодержаниеВведение31 Игра “Менеджмент”1.1 Общие сведения . . .1.2 Порядок игры . . . . .1.3 Обстановка на рынке .1.4 Проведение аукционов44456........................................................................................2 Реализация серверно-сетевой части2.1 Постановка задачи .
. . . . . . . . . . . . . . . . . . . . . . .2.2 Организация TCP-сервера . . . . . . . . . . . . . . . . . . . .2.2.1 Создание сокета . . . . . . . . . . . . . . . . . . . . .2.2.2 Связывание сокета с адресом . . . . . . . . . . . . . .2.2.3 Ожидание и прием клиентских соединений . . . . . .2.3 Мультиплексирование ввода-вывода . .
. . . . . . . . . . . .2.3.1 Методы организации многопользовательского сервера2.3.2 Вызов select() . . . . . . . . . . . . . . . . . . . . . . .2.4 Прием и передача данных через сокеты . . . . . . . . . . . .2.4.1 Чтение . . . . . . . . . . . . . . . .
. . . . . . . . . . .2.4.2 Запись . . . . . . . . . . . . . . . . . . . . . . . . . . .2.4.3 Разрыв соединения и обработка разрыва . . . . . . .2.5 Организация программы-клиента . . . . . . . . . . . . . . . .2.5.1 Установление соединения .
. . . . . . . . . . . . . . .2.5.2 Встречные потоки данных и их обработка . . . . . . .2.6 Дополнительные сведения . . . . . . . . . . . . . . . . . . . .2.6.1 Подробнее о порядке байт в целых числах . . . . . . .2.6.2 Как избежать “залипания” TCP-порта по завершениисервера . . . . . . . . . . .
. . . . . . . . . . . . . . .2.7 Рекомендации по тестированию . . . . . . . . . . . . . . . . .8891011121414151818192122222325253 Программирование логики игры3.1 Общие сведения . . . . . . . . . . . .3.2 Протокол взаимодействия с клиентом3.2.1 Набор команд . . . . . . . . . .3.2.2 Выдаваемые сообщения . . . .3.3 Структуры данных . . . . . . . . . . .3.4 О таблице смены уровней рынка . . .3.5 О проведении аукционов . . . . .
. . .3.6 Диалоги с пользователем . . . . . . .64303030313233343536........................................................................................................26273.7 Рекомендации по тестированию . . . . . . . . . . . . . . . . .384 Программируемый робот4.1 Постановка задачи . . . . . . . . . . . . . . . . . .
. . . . . .4.2 Пример входного языка робота . . . . . . . . . . . . . . . . .4.2.1 Общее описание . . . . . . . . . . . . . . . . . . . . . .4.2.2 Арифметика. Выражения . . . . . . . . . . . . . . . .4.2.3 Переменные. Массивы. Присваивания . . . . . . . . .4.2.4 Условный оператор . . . . . . . .
. . . . . . . . . . . .4.2.5 Встроенные функции для получения игровой информации . . . . . . . . . . . . . . . . . . . . . . . . . . .4.2.6 Встроенные операторы для совершения игровых действий . . . . . . . . . . . . . . . . . . . . . . . . . . .
.4.2.7 Оператор отладочной печати . . . . . . . . . . . . . .4.2.8 Пример программы-сценария . . . . . . . . . . . . . .4.3 Клиентская часть программы . . . . . . . . . . . . . . . . . .4.4 Лексический и синтаксический анализ . . . . . . . . . . . . .4.4.1 Реализация лексического анализатора . .
. . . . . . .4.4.2 Синтаксический анализатор . . . . . . . . . . . . . . .4.5 Интерпретация. ПОЛИЗ . . . . . . . . . . . . . . . . . . . . .4.5.1 Примерная структура данных . . . . . . . . . . . . .4.5.2 Типы элементов ПОЛИЗа . . . . . . . . . . . . . . . .4.5.3 Методы . . . . . . . . . . . . . . . . . . . . . . .
. . .4.5.4 Исключения . . . . . . . . . . . . . . . . . . . . . . . .4.5.5 Примеры реализаций конкретных классов . . . . . . .4.6 Еще о переводе в ПОЛИЗ . . . . . . . . . . . . . . . . . . . .4.7 Рекомендации по объектно-ориентированному проектированию39394040404142Литература636542434444454648505151525457586062.