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

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

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

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

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

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

от 25%

Подписываем

договор

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

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


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. статья 162 Дополнительный объект здоровье
2. Прогнозирование и оценка химической обстановки при авариях на химически опасных объектах для студенто
3. материальных благ имеющих экономическую форму товара отношение субъекта к вещи связь между вещами
4. Даму к~сіпкерлікті дамыту ~орыны~ стратегиялы~ ма~саттары-Ша~ын ж~не орта бизнес субъектілеріне ~лтты~ ~
5. Здесь ~ но не сейчас
6. реферат дисертації на здобуття наукового ступеня кандидата сільськогосподарських наук8
7. Теории преступления и девиации Люди часто отклоняются от правил и не все их действия соответствуют социал
8. Политическая мысль в античном мире
9. З КУРСУ ІСТОРІЯ ЗАРУБІЖНОЇ ЛІТЕРАТУРИ СЕРЕДНЬОВІЧЧЯ ВІДРОДЖЕННЯ XVIIXVIII СТ.html
10. Задание на проектирование должно содержать 1