Проектирование транслятора (язык проектирования Си++) с языка Си++ на язык Ассемблер. Методы диагностики и исправления синтаксических ошибок

Страницы работы

46 страниц (Word-файл)

Фрагмент текста работы

Министерство образования Российской Федерации

Новосибирский Государственный Технический Университет

Кафедра прикладной математики

Лабораторная работа № 1-4

и РГЗ

по курсу

«Языки программирования и методы трансляции»

Факультет: ПМИ

Группа:       ПМ-51

Студенты:  Саяпина М.

                    Шмидт Е.

Вариант:     1

Новосибирск

2008


1. Цели и задачи проекта

Цель проекта

     Проектирование транслятора (язык проектирования Си++) с языка Си++  на язык Ассемблер.

Задание

     Разработать программу, осуществляющую трансляцию программы, написанной на языке «Си» в программу на языке «Ассемблер».

     Подмножество языка С++ включает:

·  данные типа int;

·  инструкции описания переменных;

·  операторы присваивания, if, if-else  любой вложенности и в любой последовательности;

·  операции  +, – ,  *, ==, != , < .

Цель лаборатоной работы

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

Задание лаборатоной работы

     В соответствии с выбранным вариантом задания к лабораторным работам с использованием средств объектно-ориентированного программирования 

1)  разработать структуру постоянных таблиц для хранения  алфавита языка, зарезервированных слов, знаков операций, разделителей и пр.;

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

2)  разработать структуру переменных таблиц  с вычисляемым входом для хранения  идентификаторов и констант (вид хеш-функции и метод рехеширования задает разработчик);

3)  реализовать для переменных таблиц алгоритмы поиска/добавления лексемы, поиска/добавления атрибутов лексемы;

4)  разработать программу для тестирования и демонстрации работы программ пп.1-3.

2. Вид, объем  и источник исходных данных

   Постоянная таблица формируется из ключевых (зарезерированных) слов, содержащихся в текстовом файле ”keywords.txt”. Слова в файле содержатся в произвольном порядке, разделены стандартными разделителями (пробел, табуляция, перевод строки, …).

   Переменные таблицы констант и идентификаторов формируются из данных, вводимых с клавиатуры.

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


3. Структура таблиц

КЛАСС "ПОСТОЯННАЯ ТАБЛИЦА"

ДЛЯ ХРАНЕНИЯ КЛЮЧЕВЫХ СЛОВ, РАЗДЕЛИТЕЛЕЙ, ЗНАКОВ ОПЕРАЦИЙ,  А ТАК ЖЕ АЛФАВИТА ВХОДНОГО ЯЗЫКА

- статическая упорядоченная одномерная таблица

Ключ=elem.

Описание:

// элемент постоянной таблица (элемент списка, реализующего таблицу)

struct static_table_elem

{

   char elem[MAX_STATICLEX_LENGTH+1];    // элемент таблицы

   static_table_elem *next;               // указатель на следующий элемент таблицы

};

// класс "постоянная таблица"

class static_table

{

   private:

      // указатель на список, реализующий таблицу

      static_table_elem *table;

   public:

      // конструктор

      static_table();

      // деструктор

      ~static_table();

      // чтение элементов таблицы из файла

      void create_table(char filename[MAX_FILENAME_LENGTH+1]);

      // поиск элемента

      int find_elem(char search[MAX_STATICLEX_LENGTH+1]);

      // распечатка элементов таблицы (отладочная функция)

      void print_table();

};


КЛАСС "ПЕРЕМЕННАЯ ТАБЛИЦА КОНСТАНТ"

- статическо-динамическая неупорядоченная двумерная хэш-таблица.

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

Ключ=elem.   

Хэш-функция: .

Описание:

// структура, описывающая положение элемента в двумерной таблице

struct numb

{

   int string;   // номер строки

   int column;   // номер столбца

};

// элемент таблицы констант (элемент списка, реализующего таблицу)

struct const_table_elem

{

   char elem[MAX_CONSTLEX_LENGTH+1];    // элемент таблицы

   const_table_elem *next;               // указатель на следующий элемент таблицы

};

// класс "переменная таблица констант"

class const_table

{

   private:

      const_table_elem *table[10];      // указатели на строки таблицы

   public:

      // конструктор

      const_table();

      // деструктор

      ~const_table();

      // добавление элемента

      int add_elem(char add[MAX_CONSTLEX_LENGTH+1], numb *place);

      // поиск элемента

      int find_elem(char search[MAX_CONSTLEX_LENGTH+1], numb *place);

      // поиск элемента по адресу

      int find_elem_byadress(char search[MAX_CONSTLEX_LENGTH+1], numb place);

      // распечатка элементов таблицы (отладочная функция)

      void print_table();

Похожие материалы

Информация о работе