Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx200 / Kursovaya_rabota(23).docx
Скачиваний:
54
Добавлен:
07.08.2013
Размер:
190.22 Кб
Скачать
  1. Практическая часть.

2.1 Синтаксис языка в бнф. Терминалы, нетерминалы, начальный символ и правила.

Вариант задания:

<Программа> ::= <Объявление переменных> <Описание вычислений> <Описание вычислений> ::= Begin <Список присваиваний> End <Объявление переменных> ::= Int <Список переменных> |

Int <Список переменных> <Объявление переменных>

<Список переменных> ::= <Идент>; | <Идент> , <Список переменных> <Список присваиваний>::= <Присваивание> |

<Присваивание> <Список присваиваний> <Присваивание> ::= <Идент> := <Выражение> ;

<Выражение> ::= <Ун.оп.> <Подвыражение> | <Подвыражение> <Подвыражение> :: = ( <Выражение> ) | <Операнд> |

< Подвыражение > <Бин.оп.> <Подвыражение>

<Ун.оп.> ::= "-"

<Бин.оп.> ::= "-" | "+" | "*" | "/"

<Операнд> ::= <Идент> | <Const>

<Идент> ::= <Буква> <Идент> | <Буква>

<Const> ::= <Цифра> <Const> | <Цифра>

Форма Бекуса – Наура – набор правил, последовательным применением которых можно построить любое предложение.

Грамматика определяется, как следующая четверка Vt – алфавит, символы которого называются терминалами из них строятся цепочки порождаемые грамматикой; Vn – алфавит, символы которого называется нетерминальными (не терминалами), используются при построении цепочек. P – Набор правил, по которым строится грамматика; S – начальное правило.

Нетерминалы:

N= {

S=<Программа>

D=<Объявление переменных>

F=<Описание вычислений>

P=<Оператор печати>

V=<Список переменных>

I=<Идентификатор>

G=<Список присваиваний>

A=<Присваивание>

E=<Выражение>

H=<Подвыражение>

O=<Операнд>

C=<Const>

N=<Цифра>

}

Терминалы:

Ключевые слова языка:

T={begin, end, integer, print}

Разделители:

R={:=, .();}

Алфавит:

A={a|…|z}

Бинарные операции:

B={+|-|/|*}

Унарная опреация:

U={-}

Цифры:

C={0|…|9}

Правила:

  1. S=DF

  2. F=begin G end

  3. G=A

  4. G=AG

  5. A=I:=E

  6. I=LI

  7. I=L

  8. E=UH

  9. E=H

  10. H=(E)

  11. H=O

  12. H= HBH

  13. O=I

  14. O=C

  15. C=NC

  16. C=N

  17. D=integer V

  18. V=I;

  19. V=I,V

  20. P=print I

2.2 Каркас транслятора.

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

Создадим классы и перечисления необходимые в дальнейшем для реализации всех частей транслятора:

/// <summary>

/// Парсер

/// </summary>

public static class Reader

/// <summary>

/// Лексический анализатор

/// </summary>

public static class LexicalAnalyzer

/// <summary>

/// Лексемы

/// </summary>

public enum Lexems

{

None, Name, Number, Begin, End, Multiplication, Division,

Plus, Minus, Equal, NotEqual, Less, LessOrEqual, More, MoreOrEqual, Int,

Print, LeftBracket, RightBracket, Semi, Comma, EOF, Determine,

LongInt, Until, Do, EndUntil

}

/// <summary>

/// Ключевое слово

/// </summary>

internal struct KeyWord

{

public string word;

public Lexems lex;

}

/// <summary>

/// Категория

/// </summary>

public enum tCat

{

Const, Var, Type

}

/// <summary>

/// Тип

/// </summary>

public enum tType

{

None, Int, LInt, Bool

}

/// <summary>

/// Идентификатор

/// </summary>

public struct Identificator

{

public string name;

public tCat category;

public tType type;

}

/// <summary>

/// Таблица имен

/// </summary>

public static class NameTable

/// <summary>

/// Синтаксический анализатор

/// </summary>

public static class SyntaxAnalyzer

/// <summary>

/// Генератор постфиксной записи

/// </summary>

public static class PostFix

/// <summary>

/// Генератор кода

/// </summary>

public static class CodeGenerator

Дальше создаем необходимый для удобной работы интерфейс (рис.1), с верхним меню:

Рис.1 Интерфейс приложения

Соседние файлы в папке курсовая docx200