Главная страница
Навигация по странице:

  • 3.5 Интерпретатор программы

  • 4 Структурная организация данных 4.1 Спецификация входной информации

  • 4.2 Спецификация выходной информации

  • 6 Установка и эксплуатация программного средства

  • 7 Работа с программным средством

  • Список использованных источников

  • Приложение А Таблицы служебных слов и ограничителей

  • Разработка компилятора модельного языка. Отчет. Пояснительная записка гоу огу 230105. 60. 11. 06 O руководитель работы Ишакова Е. Н. " " 2011г. Исполнитель


    Скачать 1.59 Mb.
    НазваниеПояснительная записка гоу огу 230105. 60. 11. 06 O руководитель работы Ишакова Е. Н. " " 2011г. Исполнитель
    АнкорРазработка компилятора модельного языка
    Дата04.10.2020
    Размер1.59 Mb.
    Формат файлаdoc
    Имя файлаОтчет.doc
    ТипПояснительная записка
    #140979
    страница4 из 8
    1   2   3   4   5   6   7   8

    Перевод в ПОЛИЗ операторов. Каждый оператор языка программирования может быть представлен как n-местная операция с семантикой, соответствующей семантике оператора.


    Оператор присваивания I as B в ПОЛИЗе записывается:

    IBas,

    где «as» - двуместная операция,

    I, B – операнды операции присваивания;

    I – означает, что операндом операции «as» является адрес переменной I, а не ее значение.

    Пример 2: Оператор x as x-1 в ПОЛИЗе имеет вид: x x 1 - as.

    Оператор перехода в терминах ПОЛИЗа означает, что процесс интерпретации необходимо продолжить с того элемента ПОЛИЗа, который указан как операнд операции перехода. Чтобы можно было ссылаться на элементы ПОЛИЗа, будем считать, что все они пронумерованы, начиная с единицы (например, последовательные элементы одномерного массива). Пусть ПОЛИЗ оператора, помеченного меткой L, начинается с номера p, тогда оператору безусловного перехода goto L в ПОЛИЗе будет соответствовать:

    p!, где ! – операция выбора элемента ПОЛИЗа, номер которого равен p.

    Условный оператор. Введем вспомогательную операцию – условный переход «по лжи» с семантикой if not E goto L. Это двуместная операция с операндами E и L. Обозначим ее !F, тогда в ПОЛИЗе она будет записываться:

    E p !F, где p – номер элемента, с которого начинается ПОЛИЗ оператора, помеченного меткой L.

    С использованием введенной операции условный оператор if E then S else S4 в ПОЛИЗе будет записываться:

    E p1 !F S p2 ! S4, где p1 – номер элемента, с которого начинается ПОЛИЗ оператора S4, а p1 – оператора, следующего за условным оператором.
    Пример 3: ПОЛИЗ оператора if a>1 a as a/3 else a as a/9 представлен в таблице 2.3.
    Таблица 8 – ПОЛИЗ оператора if


    лексема

    a

    1

    >

    13

    !F

    a

    a

    3

    /

    as

    18

    !

    a

    a

    9

    /

    as



    номер

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18


    Оператор цикла while. С учетом введенных операций оператор цикла whileVdoOp в ПОЛИЗе будет записываться:

    V p1 !FOppo !, где po – номер элемента, с которого начинается ПОЛИЗ выражения B, а p1 – оператора, следующего за данным оператором цикла.

    Оператор цикла for. С учетом введенных операций оператор цикла forOprtoVdoOp в ПОЛИЗе будет записываться:

    OprVp1 !FOpII 1 +aspo !, где po – номер элемента, с которого начинается операция сравнения , а p1 – оператора, следующего за данным оператором цикла.

    Операторы ввода и вывода языка М одноместные. Пусть R – обозначение операции ввода, а W – обозначение операции вывода, тогда оператор readI в ПОЛИЗе запишется как IR, а оператор writeEEW.

    Составной оператор {S1; S2;...; Sn } в ПОЛИЗе записывается как S1 S2... Sn.


    Пример 4: ПОЛИЗ оператора while i<1 do y as i*i+1: i as i-1; представлен в таблице 2.4.

    Таблица 9 – ПОЛИЗ оператора while

    Лексема

    i

    1

    <

    20

    !F

    y

    i

    i

    *

    1

    +

    as

    i

    i

    1

    -

    as

    1

    !



    номер

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    Синтаксически управляемый перевод

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

    Таблица 10 - Спецификация основных процедур и функций ПОЛИЗа


    Название функции

    Назначение функции

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

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

    private void AddLexeme (Lexeme lexeme)


    Добавляет лексему в полиз


    Добавляемая лексема

    -

    private void AddCurrentLexeme ()


    Добавляет текущую лексему в полиз


    -


    -



    3.5 Интерпретатор программы
    Запись программы в форме ПОЛИЗа удобна для последующей интерпретации (выполнения программы) с помощью стека. Массив ПОЛИЗа просматривается один раз слева направо, при этом:

    1) если очередной элемент ПОЛИЗа является операндом, то его значение заносят в стек;

    2) если очередной элемент – операция, то на «верхушке» стека находятся ее операнды, которые извлекаются из стека, над ними выполняется соответствующая операция, результат которой заносится в стек;

    3) интерпретация продолжается до тех пор, пока не будет считан из ПОЛИЗа признак окончания полиза, стек при этом должен быть пуст.

    Функции, предназначенные для интерпретации программы, приведены в таблице 5.
    Таблица 11 – спецификация основных процедур и функций интерпретатора

    Название функции

    Назначение функции

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

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

    private void Initialize ()


    Инициализирует переменные типа «integer» и «real» нулем, а «boolean» false

    -

    -

    private double Convert (string s)


    Конвертирует значение из строки в integer или double

    Строка

    Число

    public void StartInter()


    Запускает интерпретатор

    -

    -



    4 Структурная организация данных
    4.1 Спецификация входной информации

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

    Таблица 12 – Входная информация

    Имя

    Тип

    Назначение

    Text

    string

    Текст программы на модельном языке



    4.2 Спецификация выходной информации

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

    Таблица 13 – Выходная информация

    Имя

    Тип

    Назначение

    numbers

    List

    Список чисел, результат работы лексического анализатора

    identif

    List

    Список идентификаторов, результат работы лексического анализатора

    lexList

    List

    Список лексем, результат работы лексического анализатора

    POLIZ

    List

    ПОЛИЗ, результат работы синтаксического, семантического анализаторов и генератора внутреннего представления программы

    Identiflist

    List

    Расширенная таблица идентификаторов,



    5 Разработка алгоритма решения задачи

    5.1 Укрупненная схема алгоритма программного средства представлена на рисунке 1.


    Рисунок 1 – Укрупненная схема алгоритма программного средства
    5.2 Детальная схема алгоритма программного средства представлена на рисунке 2.

    Рисунок 2 – Детальная схема процедуры private void BinToDec()

    6 Установка и эксплуатация программного средства

    Для того чтобы установить данное программное средство на ПК необходимо подключить носитель (CD, Flash Device), на котором это программное средство находится. Далее необходимо открыть проводник, найти данный носитель информации, найти на нем данное программное средство и скопировать его на локальный диск (винчестер).

    Данное программное средство позволяет быстро получить результат, не требуя больших затрат ресурсов компьютера. Оно предназначено для использования в семействе операционных систем MS Windows. Поставляется оно в виде одного файла размером 755 Кбайт. Для работы необходимо запустить исполняемый exe-файл.

    7 Работа с программным средством
    Для начала работы с программным средством необходимо запустить файл LA.exe. После этого появляется окно(рисунок 3).

    Рисунок 3 – Вид рабочего окна программы
    В данном окне можно вводить, редактировать, текст программы на модельном языке.

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


    Рисунок 4 – Кнопка запуска программы.
    После этого если программа написана правильно, то заполняются таблицы служебных слов, разделителей, идентификаторов, чисел (рисунок 5), выводится множество лексем выводятся сообщение об ошибках, или об их отсутствии(синтаксический и семантический анализ(рисунок 6)), появляется окно терминала – рисунок 7, в котором вводятся данные для работы программы, и выводится результат программы.


    Рисунок 5 – Результат работы лексического анализатора.

    Рисунок 6 – Сообщение об ошибке.

    Рисунок 7 – Окно терминала .
    Заключение

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

    Разработали на языке программирования С# в системе Visual Studio 2010 программное средство реализующее компилятор модельного языка программирования. Программное средство способно выполнять следующие функции:

    - ввод и редактирование текста программ, написанных на определенном модельном языке;

    - производить лексический анализ программ;

    - выполнять синтаксическую и семантическую проверку программ;

    - переводить программы в обратную польскую запись;

    - интерпретировать программы на модельном языке, записанных в форме ПОЛИЗа.

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

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

    Список использованных источников
    1 Гордеев А.В. Системное программное обеспечение [Текст]: учеб. для вузов / А. В. Гордеев, А.Ю. Молчанов; под. общ. ред. А.В. Гордеева. – СПб.: Питер, 2001. - 734 с.: ил.; 24 см. - Библиогр.: с. 719-724.

    2 Ишакова Е.Н. Теория языков программирования и методов трансляции: учебное пособие / Е.Н. Ишакова. – Оренбург: ИПК ГОУ ОГУ, 2007. – 137 с.

    3 Калинин А.Г. Универсальные языки программирования: Семантический подход [Текст] / А.Г. Калинин, И.В. Мацкевич. – М.: Радио и связь, 1991. - 398, [1] с.: ил.; 21 см. - Библиогр.: с. 395-398.

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


    Приложение А

    Таблицы служебных слов и ограничителей
    Таблица 14 – Таблица служебных слов

    1

    and

    2

    not

    3

    integer

    4

    real

    5

    boolean

    6

    as

    7

    if

    8

    then

    9

    else

    10

    for

    11

    to

    12

    do

    13

    while

    14

    read

    15

    write

    16

    or

    17

    true

    18

    false

    Таблица 15 – Таблица ограничителей


    1

    <>

    2

    =

    3

    <

    4

    <=

    5

    >

    6

    >=

    7

    +

    8

    -

    9

    *

    10

    /

    11

    {

    12

    }

    13

    ;

    14

    ,

    15

    :

    16

    (

    17

    )


    1   2   3   4   5   6   7   8


    написать администратору сайта