Конвертер с одного языка высокого уровня на другой

Муниципальное образовательное  учреждение


высшего профессионального  образования

Южно-Уральский профессиональный институт

Кафедра «Информатика и вычислительная техника»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Курсовая работа

по  дисциплине СД.ДС.Ф.4 Системное программное обеспечение

специальности 230105.65 «Программное обеспечение вычислительной техники и автоматизированных систем»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Челябинск

2012

      Содержание:

 

1. Описание задания для курсового проекта

2. Постановка задачи

2.1 Название задачи

2.2 Описание

2.4 Входные данные

2.5 Выходные данные

2.6 Ошибки

3. Выбор метода решения

4. Описание функций и переменных транслятора

5. Разработка алгоритма

6. Кодирование алгоритма программы транслятора на языке Си++

7. Распечатка тестов и результатов

8. Выводы

9. Список использованной литературы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

      Описание задания  для курсового проекта.

      Тема: «Конвертер  с одного языка высокого уровня  на другой.».

 

      2. Постановка задачи

      2.1 Название задачи

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

      Данная задача  актуальна из-за некоторых проблем,  связанных с использованием разных  языков программирования для  написания программ, как например Delphi или Паскаль. Для людей  знающих всего несколько языков, не включающих выше перечисленные, данная проблема будет стоять особенно остро. Язык Си и Си++ на наше время являются наиболее известными, поэтому именно этот язык мы используем для трансляции заданной программы. Кроме того, язык Си и Си++ так же наиболее эффективный и перевод программ именно на этот язык упрощает работу с программой. Транслятор дает возможность обеспечить более дешевую разработку программы без затраты в дальнейшем на человеческие ресурсы.

      2  Описание

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

      Сама программа  будет реализовывать транслирование  по типу:

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

      -проверка строки  на ключевые слова, описанные как массив ключевых слов;

      -проверка на функции;

      -проверка на операторы;

      -проверка на комментарии;

|-вывод текста в выходной  файл: число операторов в исходной  программе, число операторов в  полученной программе, число        |

|ошибочных операторов в полученной  программе.                                                                             |

Адрес исходного и выходного  файла вводятся пользователем с  клавиатуры.

      3  Входная информация

      По заданному условию путь к исходным данным задает пользователь. Файл будет иметь формат текста (txt), однако разрешение файла указывать не обязательно.

      Заданный адрес  будет обрабатываться программой  и при указании несуществующего  файла - выдается сообщение об  ошибке. Программа не продолжает работу.

      printf("Имя исходного  файла:");

       scanf("%s",s);

      где s- массив типа char.

      4  Выходная информация

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

      -модуль #include - как  статичный элемент разработки  программ;

      -название программы;

      - сообщения об  ошибках на месте неопознанных  операторов;

      -определенные по  условию операторы (If Le Then, New, dispose, указатель(на запись))-переменные типа integer;

      -арифметические  конструкции;

      -логические конструкции;

      -объявление главной программы;

      -замену begin, end на {,};

      -присутствующие в исходном файле  комментарии.

      Пробелами в выходном файле  пренебрегли.

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

      printf("\nКоличество операторов"

       " в исходной программе: %d", koper1);

       printf("\nКоличество  операторов"

       " в полученной  программе: %d", koper2);

       printf("\nКоличество  ошибочных операторов"

       " в полученной  программе: %d", ker);

       printf("\n\nФайл  с результатом: %s",s);

      где:

      koper1 –количество операторов в исходном файле

      koper2 – количество  операторов в выходном файле

      ker – количество  ошибок

      s –имя выходного  файла

      5  Ошибки

      При работе с  данной программой пользователь  может совершить ошибки:

      - неправильное имя исходного файла:

      printf("Имя исходного  файла:");

       scanf("%s",s);

       if (!GetText(s))

       { printf("\nОшибка открытия файла!"); }

      - неправильное имя  входного файла:

      printf("\nИмя выходного файла:");

       scanf("%s",s);

       if (!PutText(s))

       { printf("\nОшибка создания файла!");

       }

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

      3. Метод решения  задачи

      Данный этап включает в себя описания логической и математической модели решения задачи, и словесное описание модели в виде плана действий.

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

      [pic]

      Пусть мы имеем  некое выражение Le1, проверим его  по нашей логической модели  получения данных:

      - Проверка является  ли выражение Le1 знаком =, , >, >=, s,&instr[inpos],slen)) return 0;

       p = p->next;

       }

       np = new var;

       memcpy(np->s,&instr[inpos],slen);

       np->s[slen]=0;

       np->tp = -1;

      if (gl) {

       np->next = vars;

       vars = np;

       } else {

       np->next = lvars;

       lvars = np;

       }

       return 1;

      }

      int addnestype()

      {

types *head=typeslist, *ntype;

while (head) {

if (strlen(head->s)==slen&&

!memcmp(head->s,&instr[inpos],slen)) return 0;

head = head->next;

}

ntype = new types;

memcpy(ntype->s,&instr[inpos],slen);

ntype->s[slen]=0;

ntype->tid = uvars;

uvars++;

ntype->next = typeslist;

typeslist = ntype;

return 1;

      }

      int uvart()

      {

types *head=typeslist;

while(head)

{

if (strlen(head->s)==slen&&

!memcmp(head->s,&instr[inpos],slen)) return head->tid;

       head = head->next;

}

return 0;

      }

      char* utname(int number)

      {

types *head=typeslist;

while(head)

{

if (head->tid==number) return head->s;

       head = head->next;

}

return 0;

      }

      void newtype(int gl, int type){

       var *p;

       if (gl) p = vars; else p = lvars;

       while (p) {

       if (p->tp==-1) p->tp = type;

       p = p->next;

    }

      }

     int vartype(){

       var * p;

       p = lvars;

       while (p) {

       if (strlen(p->s)==slen&&

       !memcmp(p->s,&instr[inpos],slen)) return p->tp;

       p = p->next;

       }

       p = vars;

       while (p) {

       if (strlen(p->s)==slen&&

       !memcmp(p->s,&instr[inpos],slen)) return p->tp;

       p = p->next;

       }

       return 0;

      }

      char* usertype()

      {

       types * p;

       p = typeslist;

       while (p) {

       if (strlen(p->s)==slen&&

!memcmp(p->s,&instr[inpos],slen)) return p->s;

       p = p->next;

       }

      }

      void Ocvobw(int gl){

       var *p, *pp;

       p = lvars;

       while (p) {

       pp = p;

       p = p->next;

       delete pp;

       }

       lvars = NULL;

       if (gl) {

       p = vars;

       while (p) {

       pp = p;

       p = p->next;

       delete pp;

       }

       vars = NULL;

       }

      }

      int Analiz()

      {

       int st = 0;

       char c;

       slen = 0;

       while (slen+inpos='A' && c='a' && c='0' && c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7 литература

 

Основная:

  1. Молчанов А.Ю. Системное программное обеспечение. Лабораторный практикум. – СПб.: Питер, 2005. – 284 с.: ил.

 

Дополнительная:

  1. Гордеев А.В. Системное программное обеспечение. – СПб.: Питер, 2003. – 736 с.: ил.
  2. Молчанов А.Ю. Системное программное обеспечение. – СПб.: Питер, 2003. – 396 с.: ил.

Конвертер с одного языка высокого уровня на другой