Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Документ'
После предварительной регистрации Вам будет открыт стартовый личный кабинет в компании SkinnyBodyCare. В данном кабинете будут отсутствовать большинст...полностью>>
'Документ'
И.О Должность Организация Сфера деятельности компании Телефон Контактный e-mail Пожалуйста, отправьте заявку на адрес event@ Дата и время: 9 октября 0...полностью>>
'Пояснительная записка'
Рабочая программа по литературному чтению для 4 класса общеобразовательной школы разработана на основе Примерной программы начального общего образован...полностью>>
'Документ'
В соответствии со статьей 217 Бюджетного кодекса Российской Федерации, руководствуясь Порядком составления и ведения сводной бюджетной росписи бюджета...полностью>>

Главная > Методические указания

Сохрани ссылку в одной из сетей:
Информация о документе
Дата добавления:
Размер:
Доступные форматы для скачивания:

ТЕОРИЯ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ И СТРУКТУР

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

ПО ВЫПОЛНЕНИЮ КОНТРОЛЬНОЙ РАБОТЫ

ВВЕДЕНИЕ

Изучение дисциплины «Теория вычислительных процессов и структур» предусмотрено Федеральным государственным образовательным стандартом высшего профессионального образования, регламентирующим процесс подготовки бакалавров по направлению 010500.62 «Математическое обеспечение и администрирование информационных систем». В соответствии с этим стандартом данная дисциплина должна быть обеспечена практикумом.

Представляется целесообразным в рамках контрольной работы по дисциплине «Теория вычислительных процессов и структур» изучить основы программирования на языке низкого уровня Assembler. Задания контрольной работы будут способствовать закреплению знаний по соответствующим разделам теоретической части курса, более глубокому пониманию студентами основных вопросов компиляции и трансляции программ, а также генерации машинного исполняемого кода.

Задания носят теоретический и практический характер, и заключается в программировании задач на языке Assembler и ответах на вопросы.

Задания выполняются в строгой последовательности: сначала указывается условие, затем ответ. Контрольная работа выполняется в письменном виде в виде распечаток всех созданных документов. Объем контрольной работы не должен превышать 25 страниц ученической тетради или 15 печатных страниц. Работа должна быть грамотно написана, правильно оформлена. Страницы нумеруются, ставится номер варианта, подпись и дата выполнения. В конце работы указывается список используемой литературы.

Контрольную работу необходимо представить в сроки, указанные в учебном графике. Работы, не отвечающие требованиям методических указаний, не засчитываются.

ОБЩИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Контрольная работа состоит из двух заданий – первое задание состоит в разработке собственных программ на языке Assembler в эмуляторе микропроцессора - emu8086, второе задание в разработке собственного лексического анализатора.

Задание № 1 Циклические конструкции в языке Assembler

Цель: изучение реализации циклических конструкций в языке Assembler.

Стартовое окно эмулятора emu8086 выглядит следующим образом (рис. 1). При запуске выбирается пункт new. Далее в следующем окне (рис. 2) нажимаем cancel. Далее в открывшемся окне набирается программа на языке Assembler (рис.3). После запуска программы появляется эмулятор микропроцессора, где видны регистры и их значения. Значения в регистры заносятся в шестнадцатеричной системе счисления. Управляя значениями в регистрах микропроцессора, поучаем необходимый результат также в регистре микропроцессора. Следует иметь в виду что результат всегда получается в регистре AX, поэтому нужно вовремя сохранять промежуточный результат в других регистрах BX, CX, DX.

1. Регистры

Помимо ячеек в оперативной памяти для хранения (кратковременного) данных можно использовать регистры – ячейки, расположенные в центральном процессоре. Доступ к регистрам осуществляется намного быстрее, чем доступ к ячейкам памяти, следовательно, используя регистры, возможно существенно увеличить скорость работы программы.

Все регистры имеют размер слова (16 разрядов); за каждым из них закреплено определенное имя. По назначению и способу использования регистры можно разбить на следующие группы:

  1. регистры общего назначения (AX, BX, CX, DX, SI, DI, BP, SP)

  2. сегментные регистры (CS, DS, SS, ES)

  3. указатель команд (IP)

  4. регистры флагов (Flags)

Рис. 1

Рис. 2

Рис. 3

Краткие теоретические сведения

Регистры общего назначения

К этой группе относятся 8 регистров:

AH

AL


AX SI

BH

BL


BX DI

CH

CL


CX BP

DH

DL

DX SP

AX

Accumulator, аккумулятор

BX

Base, база

CX

Counter, счетчик

DX

Data, данные

(буква X – eXtended, расширенный)

SI

Source index, индекс источника

DI

Destination index, индекс приемника

BP

Base pointer, указатель базы

SP

Stack pointer, указатель стека

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

В регистрах AX, BX, CX и DX возможен независимый доступ к их старший (High – выше, старший) и младший (Low – ниже, младший) половинам. Можно сказать, что каждый из этих регистров состоит из двух байтовых регистров. Например, с регистром AX можно работать так: записать в него слово (16 битов), затем считать только левую половину этого слова (байт из AH), не считывая правую половину, далее можно сделать запись только в AL, не меняя AH.

Сегментные регистры

Всего 4 регистра:

CS SS


DS ES

Ни в каких арифметических, логических и других операциях эти регистры не могут участвовать. Можно только записывать в них и считывать из них, да и то здесь есть определенные ограничения.

Эти регистры используются для сегментирования адресов, которое является разновидностью модификации адресов и которое используется для сокращения размера команд.

Регистр флагов

В ПК имеется регистр флагов. Флаг – это бит, принимающий значение 1 («флаг установлен»), если выполнено некоторое условие, и значение 0 («флаг сброшен») в противном случае. В ПК используется 9 флагов, причем инструктивно они собраны в один 16 – разрядный регистр. Каждый флаг – это один из разрядов данного регистра:

OF

DF
IF
TF

SF

ZF

AF

PF

CF

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

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

Флаги условии:

CF - Флаг переноса. Он наиболее полезен в арифметических операциях над числами без знака. Например, если результат арифметической операции не помещается в отведенную ячейку, CF=1, иначе CF=0.

OF - Флаг переполнения. Этот флаг наиболее полезен в арифметических операциях со знаком. Получает значение 1, если в результате операции произошло переполнение мантиссы.

ZF - Флаг нуля. ZF=1, если результат команды оказался нулевым.

SF - Флаг знака. Устанавливается в 1, если в операции над знаковыми числами получился определенный результат.

PF - Флаг четности. Он равен 1, если в 8 младших битах результата очередной команды содержится четное количество двоичных единиц. Учитывается обычно только в операциях ввода- вывода.

AF - Флаг дополнительного переноса. Фиксирует особенности выполнения операции над двоично-десятичными числами.

Флаги состояний:

DF - Флаг направления. Устанавливает направление просмотра строк в строковых командах; при DF=0 строки просматриваются «вперед» (от начала к концу), при DF=1 – в обратном направлении.

IF – Флаг прерываний. При IF=0 процессор перестает реагировать на поступающие к нему прерывания, а при IF=1 блокировка прерывании снимается.

TF – Флаг трассировки. При TF=1 после выполнения каждой команды процессор делает прерывание, чем можно воспользоваться при отладке программы – для ее трассировки.

Реализация циклов

С помощью команд перехода можно реализовать любые разветвляющиеся и циклические алгоритмы. Ниже приведены примеры, в которых S, S1 и S2 - какие-то операторы, а X – знаковая переменная.

На практике наиболее часто встречаются циклы с заранее известным числом повторений. Например, пусть некоторую группу команд S (тело цикла) надо повторить N раз (N>0). Тогда на Ассемблере этот цикл можно реализовать по такой схеме:

В ПК введена специальная команда, которая объединяет в себе действие трех последних команд:

Управление циклом по счетчику: LOOP <метка>

Действие этой команды можно описать так:

CX: =CX-1; IF CX0 THEN GOTO <метка>

С помощью команды LOOP наш цикл запишется в следующем виде:

Однако, команда LOOP имеет ряд особенностей:

  1. команда LOOP требует, чтобы в качестве счетчика цикла обязательно использовался регистр CX

  2. начальное значение для CX должно быть занесено до цикла, причем этому регистру надо присвоить ровно столько, сколько должен повторятся цикл (например, нельзя организовать цикл от 3 до 103)

  3. поскольку команда LOOP ставится в конце цикла, тело цикла хотя бы раз обязательно выполнится. Поэтому для случая CX=0 цикл все равно выполнится хотя бы один раз. Поэтому, если возможен вариант CX=0, то тело цикла следует обойти при CX=0 (именно для этих случаев в ПК введена команда JCXR)

  1. как и команда условного перехода, команда LOOP реализует только короткий переход, поэтому расстояние от нее до начала цикла (метки L) не должно превышать 127 – 128 байт (примерно 30 – 40 команд). Если цикл содержит больше команд, то цикл следует реализовать по-другому.

Задание.

Взять из таблицы 1 задание, соответствующее варианту. Написать программу, реализующую алгоритм решения задачи.

варианта

Задание

Определить, является ли число k степенью числа 3.

Даны два целых числа A и B (A < B). Найти сумму всех целых чисел от A до B включительно.

Даны два целых числа A и B (A < B). Найти произведение всех целых чисел от A до B включительно.

Дано вещественное число A и целое число N (> 0). Найти A в степени N

Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3K > N.

Найти произведение двузначных нечетных чисел, кратных 13.

Даны целые числа K и N. Вывести N раз число K.

Определить, является ли число k степенью числа 2.

Вычислить , 0< m, n <256.

Вычислить

Задание № 2. Проектирование лексического анализатора

Цель: изучение основных понятий теории регулярных грамматик, ознакомление с назначением и принципами работы лексических анализаторов (сканеров), получение практических навыков построения сканера на примере заданного простейшего входного языка.

Краткие теоретические сведения Назначение лексического анализатора

Лексический анализатор (или сканер) - это часть-компилятора, которая читает литеры программы на исходном языке и строит из них слова (лексемы) исходно­го языка. На вход лексического анализатора поступает текст исходной програм­мы, а выходная информация передается для дальнейшей обработки компилято­ром на этапе синтаксического анализа и разбора.

Лексема (лексическая единица языка) - это структурная единица языка, которая состоит из элементарных символов языка и не содержит в своем составе других структурных единиц языка. Лексемами языков программирования являются идеи -тификаторы, константы, ключевые слова языка, знаки операций и т. п. Состав возможных лексем каждого конкретного языка программирования определяется синтаксисом этого языка.

С теоретической точки зрения лексический анализатор не является обязатель­ной, необходимой частью компилятора. Его функции могут выполняться на эта­пе синтаксического анализа. Однако существует несколько причин, исходя из которых в состав практически всех компиляторов включают лексический анализ.

Это следующие причины;

- упрощается работа с текстом исходной программы на этапе синтаксического разбора и сокращается объем обрабатываемой информации, так как лексиче­ский анализатор структурирует поступающий на вход исходный текст програм­мы и удаляет всю незначащую информацию;

- для выделения в тексте и разбора лексем возможно применять простую, эф­фективную и хорошо проработанную теоретически технику анализа, в то вре­мя как на этапе синтаксического анализа конструкций исходного языка ис­пользуются достаточно сложные алгоритмы разбора;

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

Функции, выполняемые лексическим анализатором, и состав лексем, которые он выделяет в тексте исходной программы, могут меняться в зависимости от версии компилятора. В основном лексические анализаторы выполняют исключение из текста исходной программы комментариев и незначащих пробелов, а также вы­деление лексем следующих типов: идентификаторов, строковых, символьных и числовых констант, знаков операций, разделителей и ключевых (служебных) слов входного языка.

В большинстве компиляторов лексический и синтаксический анализаторы - это взаимосвязанные части. Где провести границу между лексическим и синтакси­ческим анализом, какие конструкции анализировать сканером, а какие — синтак­сическим распознавателем, решает разработчик компилятора. Как правило, лю­бой анализ стремятся выполнить на этапе лексического разбора входной програм­мы, если он может быть там выполнен. Возможности лексического анализатора ограничены по сравнению с синтаксическим анализатором, так как в его основе лежат более простые механизмы.

Проблема определения границ лексем

В простейшем случае фазы лексического и синтаксического анализа могут вы­полняться компилятором последовательно. Но для многих языков программиро­вания информации на этапе лексического анализа может быть недостаточно для однозначного определения типа и границ очередной лексемы.

Иллюстрацией такого случая может служить пример оператора программы на языке Фортран, когда по части текста D0 10 I=1... невозможно определить тип оператора (а соответственно, и границы лексем). В случае D0 10 I=1,15. это будет присвоение вещественной переменной D010I значения константы 1.15 (пробелы в Фортране игнорируются), а в случае D0 10 I=1,15 это цикл с перечислением от 1 до 15 по целочисленной переменной I до метки 10.

Другая иллюстрация из более современного языка программирования C++ - опе­ратор присваивания k=i+++++j;. который имеет только одну верную интерпрета­цию (если операции разделить пробелами): k = i+++++j;.

Если невозможно определить границы лексем, то лексический анализ исходного текста должен выполняться поэтапно, Тогда лексический и синтаксический анализаторы должны функционировать параллельно, поочередно обращаясь друг к другу. Лексический анализатор, найдя очередную лексему, передает ее синтак­сическому анализатору, тот пытается выполнить анализ считанной части исход­ной программы и может либо запросить у лексического анализатора следующую лексему, либо потребовать от него вернуться на несколько шагов назад и попро­бовать выделить лексемы с другими границами. При этом он может сообщить ин­формацию о том, какую лексему следует ожидать.

Параллельная работа лексического и синтаксического анализаторов, очевидно, более сложна в реализации, чем их последовательное выполнение. Кроме того, такой подход требует больше вычислительных ресурсов и в общем случае боль­шего времени на анализ исходной программы, так как допускает возврат назад и повторный анализ уже прочитанной части исходного кода. Тем не менее слож­ность синтаксиса некоторых языков программирования требует именно такого подхода - рассмотренный ранее пример программы на языке Фортран не может быть проанализирован иначе.

Чтобы избежать параллельной работы лексического и синтаксического анализа­торов, разработчики компиляторов и языков программирования часто идут на разумные ограничения синтаксиса входного языка. Например, для языка C++ принято соглашение, что при возникновении проблем с определением границ лек­семы всегда выбирается лексема максимально возможной длины.

В рассмотренном выше примере для оператора k=i+++++j; это приведет к тому, что при чтении четвертого знака + из двух вариантов лексем (+ — знак сложения в C++, а ++ — оператор инкремента) лексический анализатор выберет самую длин­ную — ++ (оператор инкремента) — и в целом весь оператор будет разобран как k = i++ ++ +j; (знаки операций разделены пробелами), что неверно, так как семан­тика языка C++ запрещает два оператора инкремента подряд. Конечно, неверный анализ операторов, аналогичных приведенному в примере (желающие могут убе­диться в этом на любом доступном компиляторе языка C++), — незначительная плата за увеличение эффективности работы компилятора и не ограничивает воз­можности языка (тот же самый оператор может быть записан в виде k-i++ + ++j:, что исключит любые неоднозначности в его анализе). Однако таким же путем для языка Фортран пойти нельзя — разница между оператором присваивания и опе­ратором цикла слишком велика, чтобы ею можно было пренебречь.

В дальнейшем будем исходить из предположения, что все лексемы могут быть однозначно выделены сканером на этапе лексического анализа. Для всех совре­менных языков программирования это действительно так, поскольку их синтак­сис разрабатывался с учетом возможностей компиляторов.

Таблица лексем и содержащаяся в ней информация

Результатом работы лексического анализатора является перечень всех найден­ных в тексте исходной программы лексем с учетом характеристик каждой лексемы. Этот перечень лексем можно представить в виде таблицы, называемой таблицей лексем. Каждой лексеме в таблице лексем соответствует некий уникальный условный код, зависящий от типа лексемы, и дополнительная служебная инфор­мация. Таблица лексем в каждой строке должна содержать информацию о виде лексемы, ее типе и, возможно, значении. Обычно структуры данных, служащие для организации такой таблицы, имеют два поля: первое - тип лексемы, второе - указатель на информацию о лексеме.

Кроме того, информация о некоторых типах лексем, найденных в исходной про­грамме, должна помешаться в таблицу идентификаторов (или в одну из таблиц идентификаторов, если компилятор предусматривает различные таблицы иден­тификаторов для различных типов лексем).

Не следует путать таблицу лексем и таблицу идентификаторов - это две принципиально раз­ные таблицы, обрабатываемые лексическим анализатором.

Таблица лексем фактически содержит весь текст исходной программы, обрабо­танный лексическим анализатором. В нее входят все возможные типы лексем, кроме того, любая лексема может встречаться в ней любое количество раз. Табли­ца идентификаторов содержит только определенные типы лексем - идентифи­каторы и константы. В нее не попадают такие лексемы, как ключевые (служеб­ные) слова входного языка, знаки операций и разделители. Кроме того, каждая лексема (идентификатор или константа) может встречаться в таблице идентифи­каторов только один раз. Также можно отметить, что лексемы в таблице лексем обязательно располагаются в том же порядке, что и в исходной программе (поря­док лексем в ней не меняется), а в таблице идентификаторов лексемы располага­ются в любом порядке так, чтобы обеспечить удобство поиска.

В качестве примера можно рассмотреть некоторый фрагмент исходного кода на языке Object Pascal и соответствующую ему таблицу лексем, представленную в табл. 2.1:

begin

for i:=l to N do

fg := fg * 0,5

Поле «значение» в табл. 2.1 подразумевает некое кодовое значение, которое бу­дет Помещено в итоговую таблицу лексем в результате работы лексического ана­лизатора. Конечно, значения, которые записаны в примере, являются условны­ми. Конкретные коды выбираются разработчиками при реализации компилятор ра. Важно отметить также, что устанавливается связь таблицы лексем с таблицей идентификаторов (в примере это отражено некоторым индексом, следующим пос­ле идентификатора за знаком о, а в реальном компиляторе определяется его ре­ализацией).

Построение лексических анализаторов (сканеров)

Лексический анализатор имеет дело с такими объектами, как различного рода кон­станты и идентификаторы (к последним относятся и ключевые слова). Язык опи­сания констант и идентификаторов в большинстве случаев является регулярным, то есть может быть описан с помощью регулярных грамматик [1-4,7]. Распознава­телями для регулярных языков являются конечные автоматы (КА). Существуют правила, с помощью которых для любой регулярной грамматики может быть пост­роен КА, распознающий цепочки языка, заданного этой грамматикой.

Любой КА может быть задан с помощью пяти параметров: M(Q,∑,δ,qo,F),

где:

Q - конечное множество состояний автомата;

∑ - конечное множество допустимых входных символов (входной алфавит КА);

δ - заданное отображение множества Q*∑ во множество подмножеств P(Q)δ: Q*∑→ P(Q) (иногда δ называют функцией переходов автомата);

q0 Q - начальное состояние автомата;

FQ. - множество заключительных состояний автомата.

Другим способом описания КА является граф переходов - графическое представ­ление множества состояний и функции переходов КА. Граф переходов КА - это нагруженный однонаправленный граф, в котором вершины представляют состо­яния КА, дуги отображают переходы из одного состояния в другое, а символы нагрузки (пометки) дуг соответствуют функции перехода КА. Если функция пе­рехода КА предусматривает переход из состояния q в q 'по нескольким символам, то между ними строится одна дуга, которая помечается всеми символами, по ко­торым происходит переход из q в q'.

Недетерминированный КА неудобен для анализа цепочек, так как в нем могут встречаться состояния, допускающие неоднозначность, то есть такие, из которых выходит две или более дуги, помеченные одним и тем же символом. Очевидно, что программирование работы такого КА - нетривиальная задача. Для простого программирования функционирования КА M(Q,∑,δ,qo,F) он должен быть детер­минированным - в каждом из возможных состояний этого КА для любого вход­ного символа функция перехода должна содержать не более одного состояния:

Доказано, что любой недетерминированный КА может быть преобразован в де­терминированный КА так, чтобы их языки совпадали [3, 7, 26] (говорят, что эти КА эквивалентны).

Кроме преобразования в детерминированный КА любой КА может быть миними­зирован - для него может быть построен эквивалентный ему детерминированный КА с минимально возможным количеством состояний.

Можно написать функцию, отражающую функционирование любого детермини­рованного КА. Чтобы запрограммировать такую функцию, достаточно иметь пе­ременную, которая бы отображала текущее состояние КА, а переходы из одного состояния в другое на основе символов входной цепочки могут быть построены с помощью операторов выбора. Работа функции должна продолжаться до тех пор, пока не будет достигнут конец входной цепочки. Для вычисления результата функ­ции необходимо по ее завершении проанализировать состояние КА. Если это одно из конечных состояний, то функция выполнена успешно и входная цепочка при­нимается, если нет, то входная цепочка не принадлежит заданному языку.

Однако в общем случае задача лексического анализатора шире, чем просто про­верка цепочки символов лексемы на соответствие ее входному языку. Он должен правильно определить конец лексемы (об этом было сказано выше) и выполнить те или иные действия по запоминанию распознанной лексемы (занесение ее в таб­лицу лексем). Набор выполняемых действий определяется реализацией компи­лятора. Обычно эти действия выполняются сразу же при обнаружении конца рас­познаваемой лексемы.

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

Таким образом, алгоритм работы простейшего сканера можно описать так:

□ просматривается входной поток символов программы на исходном языке до обнаружения очередного символа, ограничивающего лексему;

□ для выбранной части входного потока выполняется функция распознавания лексемы;

□ при успешном распознавании информация о выделенной лексеме заносится в таблицу лексем, и алгоритм возвращается к первому этапу;

□ при неуспешном распознавании выдается сообщение об ошибке, а дальнейшие действия зависят от реализации сканера: либо его выполнение прекращается, либо делается попытка распознать следующую лексему (идет возврат к перво­му этапу алгоритма).

Работа программы-сканера продолжается до тех пор, пока не будут просмотрены все символы программы на исходном языке из входного потока.

Требования к выполнению задания. Порядок выполнения.

Для выполнения требуется написать программу, которая выполняет лексический анализ входного текста в соответствии с заданием и по­рождает таблицу лексем с указанием их типов и значений. Текст на входном язы­ке задается в виде символьного (текстового) файла.

Программа должна выдавать сообщения о наличии во входном тексте ошибок, которые могут быть обнаруже­ны на этапе лексического анализа.

Длину идентификаторов и строковых констант можно считать ограниченной 32 сим­волами. Программа должна допускать наличие комментариев неограниченной дли­ны во входном файле. Форму организации комментариев предлагается выбрать самостоятельно.

Задание должно выполняться в следующем порядке:

1. Получить вариант задания у преподавателя.

2. Построить описание КА, лежащего в основе лексического анализатора (в виде набора множеств и функции переходов или в виде графа переходов).

3. Написать и отладить программу на ЭВМ.

4. Сдать работающую программу преподавателю.

Варианты заданий

1. Входной язык содержит арифметические выражения, разделенные символом; (точка с запятой). Арифметические выражения состоят из идентификаторов, десятичных чисел с плавающей точкой (в обычной и логарифмической фор­ме), знака присваивания (:=), знаков операций +, -, *, / и круглых скобок.

2. Входной язык содержит логические выражения, разделенные символом; (точка с запятой). Логические выражения состоят из идентификаторов, констант true и false, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок.

3. Входной язык содержит операторы условия типа if... then ... else и if... then,

разделенные символом; (точка с запятой). Операторы условия содержат иден­тификаторы, знаки сравнения <> >, =, десятичные числа с плавающей точкой (в обычной и логарифмической форме), знак присваивания (:я).

4. Входной язык содержит операторы цикла типа for (...; ...;...) do, разделенные символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, -, десятичные числа с плавающей точкой (в обычной и логарифмической форме), знак присваивания (:=).

5. Входной язык содержит арифметические выражения, разделенные символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, римских чисел, знака присваивания (:~), знаков операций +, -, *, / и круглых скобок.

6. Входной язык содержит логические выражения, разделенные символом; (точ­ка с запятой). Логические выражения состоят из идентификаторов, констант 0 и 1, знака присваивания (:~), знаков операций or, xor, and, not и круглых скобок.

7. Входной язык содержит операторы условия типа if... then ... else и if... then, разделенные символом; (точка с запятой). Операторы условия содержат иден­тификаторы, знаки сравнения <, >, =, римские числа, знак присваивания (:=).

8. Входной язык содержит операторы цикла типа for (...;...;...) do, разделенные символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, римские числа, знак присваивания (:=).

9. Входной язык содержит арифметические выражения, разделенные символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, шестнадцатеричных чисел, знака присваивания (:=), знаков операций +, -, *, / и круглых скобок.

10. Входной язык содержит логические выражения, разделенные символом; (точка с запятой). Логические выражения состоят из идентификаторов, шестнадца­теричных чисел, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок.

11. Входной язык содержит операторы условия типа if... then... else и if... then,

разделенные символом; (точка с запятой). Операторы условия содержат иден­тификаторы, знаки сравнения <, >, -, шестнадцатеричные числа, знак присва­ивания (:=*).

12. Входной язык содержит операторы цикла типа for (...;.,.;...) do, разделенные символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, -, шестнадцатеричные числа, знак присваивания (:=•).

13. Входной язык содержит арифметические выражения, разделенные символом ; (точка с запятой). Арифметические выражения состоят из идентификаторов, символьных констант (один символ в одинарных кавычках), знака присваива­ния (:-), знаков операций +, -, *, / и круглых скобок.

14. Входной язык содержит логические выражения, разделенные символом; (точка с запятой). Логические выражения состоят из идентификаторов, символьных констант ‘Т’ и ‘F’, знака присваивания (:=), знаков операций or, хог, and, not и круглых скобок.

15. Входной язык содержит операторы условия типа if... then ... else и if... then, разделенные символом; (точка с запятой). Операторы условия содержат иден­тификаторы, знаки сравнения <, >, =, строковые константы (последователь­ность символов в двойных кавычках), знак присваивания (:=).

16. Входной язык содержит операторы цикла типа for (...; ...; ...) do, разделенные символом ; (точка с запятой). Операторы цикла содержат идентификаторы, знаки сравнения <, >, =, строковые константы (последовательность символов в двойных кавычках), знак присваивания (:=).

6. Основные контрольные вопросы.

  1. Как можно организовать циклы в ассемблере?

  2. Какой регистр в ассемблере используется как «счетчик» цикла?

  3. Для чего используется оператор Loop?

  4. Какими командами можно заменить оператор Loop?

  5. Что такое трансляция, компиляция, транслятор, компилятор?

  6. Из каких процессов состоит компиляция? Расскажите об общей структуре компилятора.

  7. Какую роль выполняет лексический анализ в процессе компиляции?

  8. Что такое лексема? Расскажите, какие типы лексем существуют в языках про­граммирования.

  9. Как могут быть связаны между собой лексический и синтаксический анализ?

  10. Какие проблемы могут возникать при определении границ лексем в процессе лексического анализа? Как решаются эти проблемы?

  11. Что такое таблица лексем? Какая информация хранится в таблице лексем?

  12. В чем разница между таблицей лексем и таблицей идентификаторов?

  13. Что такое грамматика? Дайте определения грамматики. Как выглядит описа­ние грамматики в форме Бэкуса-Наура.

  14. Какие классы грамматик существуют? Что такое регулярные грамматики?

  15. Что такое конечный автомат? Дайте определение детерминированного и не­детерминированного конечных автоматов.

  16. Опишите алгоритм преобразования недетерминированного конечного автомата в детерминированный.

  17. Какие проблемы необходимо решить при построении сканера на основе ко­нечного автомата?

  18. Объясните общий алгоритм функционирования лексического анализатора.

ПРИЛОЖЕНИЕ 1. СПИСОК СТУДЕНТОВ

Номер варианта

ФИО студента

1

Агеев Александр Евгеньевич

2

Агеева Наталья Николаевна

3

Базин Евгений Алексеевич

4

Богаткин Дмитрий Александрович

5

Громов Сергей Владимирович

6

Дергунова Елена Фёдоровна

7

Егоров Евгений Александрович

8

Ерёмина Надежда Алексеевна

9

Зимина Марина Александровна

10

Исаев Владимир Алексеевич

11

Киреев Сергей Андреевич

12

Кондакова Татьяна Юрьевна

13

Малькевич Александра Викторовна

14

Облаков Александр Геннадьевич

15

Рябов Александр Юрьевич

16

Швецова Лариса Павловна

17

Шевченко Евгений Алексеевич

18

Шереметьев Владислав Павлович

14




Похожие документы:

  1. Методические указания по выполнению контрольной работы по дисциплине «Математическая логика»

    Методические указания
    ... математики МЕТОДИЧЕСКИЕ УКАЗАНИЯ по выполнению контрольной работы по дисциплине ... 9. Отрицание импликации: . 10. Введение эквивалентности: . 11. Удаление эквивалентности: ... процессе работы ... с вычислительной процедурой ... Изучение ... и теории Структура языка ...
  2. Методические указания по выполнению практических работ адресованы студентам очной (заочной) формы обучения

    Методические указания
    ... : ______________________________________________________________________ Методические указания по выполнению практического занятия № 7 Раздел 2. Психология познавательных процессов Тема 2.4. Память Название практической работы ...
  3. Методические указания по выполнению контрольной и курсовой работ для направления бакалавриат 080200. 62 «Менеджмент» Одобрены на заседании кафедры мтсс, протокол № от 2011 г

    Методические указания
    ... ВВЕДЕНИЕ Учебная дисциплина «Теория менеджмента (история управленческой мысли, теория ... ТЕОРИЯ МЕНЕДЖМЕНТА (ИСТОРИЯ УПРАВЛЕНЧЕСКОЙ МЫСЛИ, ТЕОРИЯ ОРГАНИЗАЦИИ, ОРГАНИЗАЦИОННОЕ ПОВЕДЕНИЕ) Методические указания по выполнению контрольной и курсовой работ ...
  4. Методические указания по выполнению лабораторных работ для студентов направления подготовки 230700. 62 «Прикладная информатика» (бакалавр) 2014

    Методические указания
    ... в экономике Методические указания по выполнению лабораторных работ для студентов ... ПРОЦЕССЕ Дисциплина "Исследование операций и методы оптимизации в экономике" предусматривает чтение лекций, проведение лабораторных работ, выполнение контрольных работ ...
  5. Методические рекомендации по изучению дисциплины «Стратегический менеджмент» Для студентов и преподавателей экономических вузов и специальностей, всех форм обучения

    Методические рекомендации
    ... теории и организации бизнеса ВЭГУ РАБОЧАЯ ПРОГРАММА ПО ДИСЦИПЛИНЕ «СТРАТЕГИЧЕСКИЙ МЕНЕДЖМЕНТ» АКТУАЛЬНОСТЬ ИЗУЧЕНИЯ ДИСЦИПЛИНЫ ... МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ КОНТРОЛЬНЫХ РАБОТ для студентов - заочников ОБЩИЕ ПОЛОЖЕНИЯ Контрольная работа является ...

Другие похожие документы..