Разработка транслятора в среде 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.
Другие символы: , :, , , , ;, {, }, (, )
Классы лексем
- зарезервированные слова;
- знаки операций и разделители;
- литералы;
- идентификаторы
Лексика языков
- Класс идентификаторы: к этому классу относятся все наборы цепочек, кроме зарезервированных слов
- Класс зарезервированных слов:
- Для C#
using, class, int, float, char, public, protected, private, return, namespace
- Для Java
using, class, int, float, char, public, protected, private, return
- Класс знаков операций и разделителей:
() {} : ; = -> . , *
- Класс литералов:
Литерал целочисленная или текстовая константа.
Структура таблицы идентификаторов
имяномер в классетип
Структура таблицы литералов
имятип
Разработка синтаксического анализатора
Грамматика языков
В данном проекте исследуется лишь малая часть возможностей и особенностей вышеуказанных языков. В связи с этим спроектированные грамматики для этих языков будут включать лишь те структуры языка, которые нам необходимы
Грамматика С#
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}
={: | {}
| (|;)
={(|;)
<продолжен