Разработка транслятора в среде Java и С+

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

слово struct. Это прямое наследие языка С++ от которого создатели Java сознательно отказались.

Java поддерживает импорт статических имён (import static) из классов, позволяющий отдельно импортировать некоторые или все статические методы и переменные класса и использовать их имена без квалификации в импортирующем модуле. В C# импортируется только сборка и при каждом использовании импортируемых статических имён требуется указывать класс.

В Java константы в операторы switch должны относиться либо к целочисленному, либо к перечислимому типу. В C# в switch можно использовать текстовые строки.

Java содержит конструкцию strictfp, гарантирующую одинаковые результаты операций с плавающей точкой на всех платформах.

C# содержит конструкции checked и unchecked, позволяющие локально включать и выключать динамическую проверку арифметического переполнения.

C# поддерживает оператор перехода goto. Обычное использование передача управления на разные метки case в операторе switch и выход из вложенного цикла. В Java от использования goto сознательно отказались.

Java поддерживает метки в циклах и позволяет использовать их в командах break и continue, благодаря чему исключается такой повод использования goto, как выход из вложенного цикла.

C# поддерживает отдельное понятие именованной типизированной константы и ключевое слово const. В Java констант как таковых нет, вместо них используются статические переменные класса с модификатором final эффект от их использования точно такой же.

 

Разработка транслятора

 

Разработка лексического анализатора

Алфавит языка

Большие и малые буквы английского алфавита: a..z, A..Z

Цифры: 0,1,2,3,4,5,6,7,8,9.

Другие символы: , :, , , , ;, {, }, (, )

Классы лексем

  1. зарезервированные слова;
  2. знаки операций и разделители;
  3. литералы;
  4. идентификаторы

Лексика языков

  1. Класс идентификаторы: к этому классу относятся все наборы цепочек, кроме зарезервированных слов
  2. Класс зарезервированных слов:
  3. Для C#

using, class, int, float, char, public, protected, private, return, namespace

  1. Для Java

using, class, int, float, char, public, protected, private, return

  1. Класс знаков операций и разделителей:

() {} : ; = -> . , *

  1. Класс литералов:

Литерал целочисленная или текстовая константа.

 

Структура таблицы идентификаторов

имяномер в классетип

Структура таблицы литералов

имятип

Разработка синтаксического анализатора

Грамматика языков

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

Грамматика С#

1 6}

7

8 := 11 е

12

13

20

14 := 21 е

15

24 30} 31;

32:= 34: 35 идентификатор

33:= 36е

37 43;

38 45;

39:= 46;

47 := 49 (50)

48 := 80 е

51

56 62 return 63 литерал 64; 81)

57

66

67 := 71;

72 := 76 int

73 := 77 float

74 := 78 char

75 := 79 идентификатор

Грамматика java

1

7

8 := 11 е

12

13

20

14 := 21 е

15

24 30} 31;

32:= 34: 35 идентификатор

33:= 36е

37 43;

38 45;

39:= 46;

47 := 49 (50)

48 := 80 е

51

56 62 return 63 литерал 64; 81)

57

66

67 := 71;

72 := 76 int

73 := 77 float

74 := 78 char

75 := 79 идентификатор

82:= 84 *

83:= 85 e

 

Доказательство принадлежности к LL(1) грамматике

 

С#

={using | namespace}

={class | идентификатор |} | int | float | char}

={: | {}

={. | (|;)

={(|;)

={(|, |;)

={, |;}

={int | float | char | идентификатор}

Грамматика java

={using | class | идентификатор | int | float | char}

={class | идентификатор | int | float | char}

={: | {}

| (|;)

={(|;)

<продолжен