У вас вопросы?
У нас ответы:) SamZan.net

Vr далее следуют списки имен переменных с указанием типа

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 28.12.2024


1. Анализ описания переменных

Создание программы для анализа описания переменных – цель выполнения лабораторной работы №1.

1.1. Входные данные

На вход программы подается текстовый файл (с именем INPUT.TXT), содержащий только описания переменных на выбранном языке (Pascal или C/C++). Например, для языка Pascal содержание текстового файла может быть следующим:

var a, b, c: real;

d: array [1..6, 6..9] of integer;

s1: string;

s2: string[10];

Т.е. описание переменных начинается с ключевого слова «var», далее следуют списки имен переменных с указанием типа. В список типов необходимо включить наиболее часто используемые базовые типы. Тип может быть также массивом (в т.ч. многомерным) или строкой. У массива нижняя граница индекса не должна быть меньше верхней. Строка не может быть длиннее 255 символов.

Имя переменной – это последовательность букв и цифр, начинающаяся с буквы. Под буквами понимаются большие и малые буквы латинского алфавита (az, AZ) и подчеркивание (_). Большинство современных компиляторов не имеют ограничений по длине имен переменных, однако, значащими считаются только первые N символов (число N зависит от конкретного компилятора). Например, если N = 8, то переменные a1234567 и a12345678 рассматриваются компиляторами как идентичные, хотя обе записи являются синтаксически верными. Значение числа N можно выбрать любое (N ≥ 1), но обычно это 8, 16, 32 и т.д.

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

  •  пробелы (код ASCII – 32 или $20 в шестнадцатеричном виде);
  •  переводы строк и возвраты кареток (коды ASCII – 10 ($0A) и 13 ($0D) соответственно);
  •  табуляции (код ASCII – 9 или $09).

Для указания символа по его коду в языке Pascal используется знак «#». Либо для этих целей можно использовать функцию CHR (см. ее описание в файле справки компилятора языка Pascal). При указании букв AF в шестнадцатеричных числах можно использовать как большие, так и малые буквы. Так, для проверки символа ch на возврат каретки можно написать

if ch = #13 …

или

if ch = #$0D …

или же

if ch = chr(13) …

Для языков C/C++ файл может быть таким:

double a[10], b, c;

int x_q[5][5];

Т.е. описание состоит из указаний типов данных со следующими за ними списками имен переменных. Языки C/C++ поддерживают различные модификаторы типов – модификаторы размера (long/short), знака (signed/unsigned) и прочие (auto, register, volatile, const, static). Для упрощения задачи будем рассматривать только модификаторы размера. Обратите внимание, что модификатор может использоваться без указания базового типа, в этом случае в качестве базового типа подразумевается тип int. Например, запись

long

эквивалентна записи

long int

Модификатор long может использоваться с типами int и double, модификатор short – только с типом int.

Т.к. языки C/C++ не делают различий между символом и целым числом (байтом), то для проверки кода числа можно просто сравнить символ с кодом:

if(ch == 13) …

Если компилятор выдает в этом случае предупреждение о возможном несоответствии данных, можно использовать явное преобразование типа:

if(ch == char(13)) …

Либо можно использовать запись ‘\OOO’ или ‘\xHH’, где OOO – восьмеричная запись кода символа (максимальный код – 3778), HH – шестнадцатеричная (максимальный код – FF16). Так, проверку на символ перевода строки можно также записать в таком виде:

if(ch == ‘\x0d’) …

или

if(ch == ‘\15’) …

В языках C/C++ существуют также специальные символы для обозначения некоторых непечатных элементов таблицы ASCII:

  •  ‘\n’ – перевод строки (next line);
  •  ‘\r’возврат каретки (carriage return);
  •  ‘\t’табуляция (tabulate);

Пробелы (как в Pascal, так и в C/C++) можно обозначать просто в виде пробела, заключенного в кавычки (‘ ’).

В отличие от языка Pascal, в языках C/C++ размерность массива указывается в виде одной цифры (обязательно положительной), и каждая размерность заключается в квадратные скобки.

1.2. Выходные данные

Ваша программа должна проанализировать имеющиеся в текстовом файле описания переменных и выдать (в текстовый файл OUTPUT.TXT или на экран) результат проверки. Это может быть:

1. Сообщение о том, что описание корректное.

2. Сообщение о синтаксической ошибке (неправильные имена переменных, ошибки при использовании ключевых слов, неверные индексы массивов, отсутствие знаков пунктуации и т.д.). Указывать тип ошибки не обязательно, требуется только указать строку и позицию в строке входного файла, где наблюдается ошибка. Достаточно находить только первую ошибку в описании.

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


2. Разбор математического выражения

Создание программы для разбора математического выражения – цель выполнения лабораторной работы №2.

2.1. Входные данные

На вход программы подается текстовый файл (с именем INPUT.TXT), содержащий единственную строку символов. Данная строка задает присваивание переменной значения арифметического выражения в виде

ПЕРЕМЕННАЯ = ВЫРАЖЕНИЕ.

Выражение может включать:

  •  Знаки сложения и умножения («+» и «*»);
  •  Круглые скобки («(» и «)»);
  •  Константы (например, 5; 3.8; 1e+18, 8.41E–10);
  •  Имена переменных.

Имя переменной – это последовательность букв и цифр, начинающаяся с буквы. Входное выражение считать правильным.

2.2. Выходные данные

В выходном файле (с именем OUTPUT.TXT) для исходного выражения, заданного во входном файле, необходимо привести:

1) Таблицу имен;

2) Неоптимизированный код;

3) Оптимизированный код.


3. Разбор описания структуры при помощи LL(1)-грамматики

Создание программы для проверки правильности описания структуры при помощи LL(1)-грамматики – цель выполнения лабораторной работы №3.

3.1. Входные данные

На вход программы подаются два текстовых файла (с именами GRAMMAR.TXT и STRUCT.TXT). Первый содержит LL(1)-грамматику или таблицу разбора, второй – описание структуры (записи) на языках C/C++. Необходимо проверить, является ли описание структуры корректным с точки зрения заданной грамматики и не содержит ли конфликтов имен.

Таким образом, задание разбивается на две части:

1. Проверка синтаксиса.

2. Проверка семантики.

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

Желательно задавать грамматику, а не таблицу разбора, т.к. при необходимости грамматику модифицировать проще. Если требуется таблица разбора, ее можно получить из грамматики по описанному ниже алгоритму.

Описание структуры на языках C/C++, в общем случае, выгляди так:

struct [имя]

{

   [тип] [список переменных];

   …

   struct [имя]

   {

       …

   } [список переменных];

   …

} [список переменных];

Имя структуры – это имя нового типа, который она описывает. Как и список переменных типа структуры, это необязательный параметр. Если отсутствует и имя типа структуры, и список переменных, структура является анонимной (т.к. к ее полям невозможно получить доступ). Некоторые компиляторы разрешают такие объявления, некоторые – нет. Здесь и в дальнейшем при определении корректности структуры необходимо пользоваться правилами того компилятора, для которого разрабатывается программа.

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

struct A

{

   int A;

};

является корректной с точки зрения языка C, но не с точки зрения языка C++. Язык C++ является объектно-ориентированным, и в структуре с именем типа A ожидает появление конструктора с именем A. Если A – не конструктор, налицо конфликт имен. По тем же причинам некорректна запись

struct A

{

   struct A

   {

       …

   };

};

Но в большинстве компиляторов языков C/C++ корректной является запись

struct A

{

   …

} A;

Типы данных при описании переменных использовать стандартные, допускается наличие модификаторов размера (long/short) и знака (signed/unsigned) там, где это возможно.

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

3.2. Выходные данные

Ваша программа должна проанализировать имеющееся в текстовом файле описание структуры и выдать (в текстовый файл OUTPUT.TXT или на экран) результат проверки. Это может быть:

1. Сообщение о том, что описание структуры корректное.

2. Сообщение о синтаксической ошибке. Указывать тип ошибки не обязательно, требуется только указать строку и позицию в строке входного файла, где наблюдается ошибка. Достаточно находить только первую ошибку в описании.

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


4. Разбор описания структуры при помощи LR(1)-грамматики

Создание программы для проверки правильности описания структуры при помощи LR(1)-грамматики – цель выполнения лабораторной работы №4.

4.1. Входные данные

Соответствуют таковым в лабораторной работе №3, но разбор осуществляется с помощью LR(1)-, а не LL(1)-грамматики. Соответственно, входной файл GRAMMAR.TXT содержит LR(1)-грамматику или таблицу разбора (грамматика, как и прежде, предпочтительнее).

4.2. Выходные данные

Аналогично лабораторной работе №3.


5. Решение систем регулярных уравнений

Решение системы регулярных уравнений – цель выполнения лабораторной работы №5.

5.1. Входные данные

Во входном файле (с именем INPUT.TXT) задается размерность системы регулярных уравнений n (1 ≤ n ≤ 8) а затем – ее коэффициенты:

α10 α11 α12 … α1n

α20 α21 α22 … α2n

…………………

αn0 αn1 αn2 … αnn

Максимальная длина регулярного выражения для каждого коэффициента равна 3.

5.2. Выходные данные

В выходной файл (с именем OUTPUT.TXT) необходимо вывести:

1) Полное решение системы регулярных уравнений;

2) Упрощенное решение.

Упрощенное решение получается, если применить к полученному решению леммы 1-12.




1. Открытое общество и его враги
2. тематические модели конструкций
3. Берег расположившемся в курорте Сергеевка Одесской области знают не только в Украине но и за её пределами
4. Притыкинская основная общеобразовательная школа Согласовано Руково
5. Понятие права в общесоциальном смысле Правовой статус личности
6. ПОСОБИЕ ПО ОТЕЧЕСТВЕННОЙ ИСТОРИИ
7. Педагогические условия формирования общечеловеческих ценностей у подростков в процессе изучения иностранного языка
8. Вопрос 20 Статические модели объектно
9. Основні поняття мови програмування Delphi 50
10. The Cinema
11. реферат Найстарішою газетою на американському континенті слід уважати The Present Stte of the NewEnglish ffirs у Бостоні
12. начало экзаменов в 9.
13. Реферат- ПРОФЕССИОНАЛЬНЫЕ ИНТОКСИКАЦИИ АРОМАТИЧЕСКИМИ УГЛЕВОДОРОДАМИ ~ БЕНЗОЛОМ И ЕГО ГОМОЛОГАМИ
14. Качество линейных непрерывных САУ и методы их оценки
15. Бухгалтерский учет
16. 600 масштаб в сочетании с разрешением влияет на размер изображения; Scn сканировать; Есл
17. Курсовая работа- Банкрутство- метод комплексного фінансового аналізу
18. Станкин Кафедра Инженерная экология и безопасность жизнедеятельности ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ
19. технологические предпосылки развития
20. Мошенничество в сфере компьютерной информации.html