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

2016-07-30СтудИзба

Описание файла

Документ из архива "Разработка транслятора в среде Java и С+", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48695"

Текст из документа "48695"

Введение


Тема, цель, актуальность работы

Анализ проектов, реализованных на языках программирования Java и C# на предмет взаимодействия между классами.

Результат работы программы необходимо вывести в файл *.xml.

Актуальность работы заключается в том, что на сегодняшний день нет известных аналогов программы. Не стоит сравнивать данный проект с такими программными продуктами как Telelogic Rapsody или Rational – он является полной противоположностью названных выше программ, так как анализирует уже «готовый», написанный проект, в то время как Telelogic Rapsody (Rational) генерирует код по диаграммам.

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

Проект может существовать как автономное приложение, а также может быть дополнен и доработан функционально.

Исследовательская часть

C# и Java– два очень похожих между собой современных языка программирования со сборкой мусора и компиляцией при выполнении. Оба языка – объектно-ориентированные, с синтаксисом, унаследованным от C++, но значительно переработанным.

Java – объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems и официально выпущенный 23 мая 1995 года. Java – так называют не только сам язык, но и платформу для создания приложений уровня предприятий на основе данного языка.

Изначально язык программирования назывался Oak (русск. Дуб) и разрабатывался Джеймсом Гослингом для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Программы на Java транслируются в байт-код, выполняемый виртуальной java-машиной (JVM) – программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор, но с тем отличием, что байтовый код, в отличие от текста, обрабатывается значительно быстрее. Достоинство подобного способа выполнения программ – в полной независимости байт-кода от ОС и оборудования, что позволяет выполнять Java-приложения на любом устройстве, которое поддерживает виртуальную машину. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной.

Длины и диапазоны значений примитивных типов определяются стандартом. Такая жёсткая стандартизация была необходима, чтобы сделать язык платформенно-независимым, что является одним из идеологических требований к Java и одной из причин её успеха. Тем не менее, одна небольшая проблема с платформенной независимостью всё же осталась. Некоторые процессоры используют для промежуточного хранения результатов 10-байтовые регистры или другими способами улучшают точность вычислений.

В языке Java имеются только динамически создаваемые объекты. Причем переменные объектного типа и объекты в Java – совершенно разные сущности. Переменные объектного типа являются ссылками, то есть неявными указателями на динамически создаваемые объекты. Это подчёркивается синтаксисом описания переменных.

C# (произносится си-шарп) – язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998–2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft.NET. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников – языков С++, Java, Delphi, Модула и Smalltalk – С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).

В Java модификатор protected в описании, помимо доступа из классов-потомков, разрешает доступ из всех классов, входящих в тот же пакет, что и класс-владелец.

В C# для объектов, которые должны быть видны в пределах сборки (примерный аналог пакета Java) введён отдельный модификатор internal, а protected сохраняет свой изначальный смысл, взятый из C++ – доступ только из классов-потомков. Допускается комбинировать internal и protected – тогда получится область доступа, соответствующая protected в Java.

Внутренние классы в C# имеют доступ только к статическим членам внешнего класса, а для доступа к нестатическим членам нужно явно указывать экземпляр внешнего класса. Локальные внутренние классы в C# не поддерживаются, обработка событий в нём не требует таких классов, поскольку строится на других механизмах. В обоих языках методы, по аналогии с C++ – функции, определённые в классе. Тело метода располагается внутри описания класса. Поддерживаются статические методы, абстрактные методы. В C# также есть явная реализация методов интерфейса, что позволяет классу реализовывать методы интерфейса отдельно от собственных методов или давать разные реализации одноимённых методов, принадлежащих двум разным интерфейсам. C# также поддерживает явное описание передачи параметров по ссылке (ключевые слова ref и out). При использовании out компилятор контролирует наличие в методе присваивания значения. C# позволяет создавать пользовательские типы-значения, используя ключевое слово 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. Класс зарезервированных слов:

    1. Для 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 := 2 3 namespace 4 {5 6}

7 := 9 using 10

8 := 11 е

12 := 16 17

13 := 18 идентификатор 19

20

14 := 21 е

15 := 22 23

24 := 25 class 26 идентификатор 27 28 {29 30} 31;

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

33:= 36е

37:= 40. 41 идентификатор 42 43;

38:= 44 45;

39:= 46;

47 := 49 (50)

48 := 80 е

51 := 52 53 идентификатор 55

56:= 58 (59) 60 (61 62 return 63 литерал 64; 81)

57:= 65

66 := 68, 69 идентификатор 70

67 := 71;

72 := 76 int

73 := 77 float

74 := 78 char

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

Грамматика java

1 := 2 3

7 := 9 using 10

8 := 11 е

12 := 16 17

13 := 18 идентификатор 19

20

14 := 21 е

15 := 22 23

24 := 25 class 26 идентификатор 27 28 {29 30} 31;

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

33:= 36е

37:= 40 -> 41 идентификатор 42 43;

38:= 44 45;

39:= 46;

47 := 49 (50)

48 := 80 е

51 := 52 53 54 идентификатор 55

56:= 58 (59) 60 (61 62 return 63 литерал 64; 81)

57:= 65

66 := 68, 69 идентификатор 70

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}

={: | {}

={-> | (|;)

={(|;)

={(|, |;)

={, |;}

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

={* | идентификатор}

Таблицы разбора


Таблица разбора С#

Ожидаемый терминал

Переход

Принять

В стек

Из стека

Ошибка

1.

~

2

-

-

-

-

2.

~

7

-

-

-

-

3.

namespace

4

+

-

-

+

4.

{

5

+

-

-

+

5.

~

12

-

+

-

-

6.

}

0

+

-

+

+

7.

using

9

-

-

-

-

8.

~

11

-

-

-

-

9.

using

10

+

-

-

+

10.

~

7

-

-

-

-

11.

~

3

-

-

-

-

12.

class

16

-

-

-

-

13.

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

18

-

-

-

-

14.

}

21

-

-

-

-

15.

~

22

-

-

-

-

16.

~

24

-

+

-

-

17.

~

12

-

-

-

-

18.

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

19

+

-

-

+

19.

~

37

-

+

-

-

20.

~

12

-

-

-

-

21.

~

0

-

-

+

-

22.

~

51

-

+

-

-

23

~

12

-

-

-

-

24

~

25

-

-

-

-

25

class

26

+

-

-

+

26

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

27

+

-

-

+

27

~

32

-

+

-

-

28

{

29

+

-

-

+

29

~

12

-

+

-

-

30

)

31

+

-

-

+

31

;

0

+

-

+

+

32

:

34

-

-

-

-

33

~

36

-

-

-

-

34

:

35

+

-

-

+

35

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

0

+

-

+

+

36

~

0

-

-

+

-

37

.

40

-

-

-

-

38

(

44

-

-

-

-

39

;

46

-

-

-

+

40

.

41

+

-

-

+

41

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

42

+

-

-

+

42

~

47

-

+

-

-

43

;

0

+

-

+

+

44

~

47

-

+

-

-

45

;

0

+

-

+

+

46

;

0

+

-

+

+

47

(

49

-

-

-

-

48

~

80

-

-

-

-

49

(

50

+

-

-

+

50

)

0

+

-

+

+

51

~

52

-

-

-

-

52

~

72

-

+

-

-

53

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

55

+

-

-

+

54

55

~

56

-

-

-

-

56

(

58

-

-

-

-

57

~

65

-

-

-

-

58

(

59

+

-

-

+

59

)

60

+

-

-

+

60

{

61

+

-

-

+

61

~

12

-

+

-

-

62

return

63

+

-

-

+

63

литерал

64

+

-

-

+

64

;

81

+

-

-

+

65

~

66

-

-

-

-

66

,

68

-

-

-

-

67

;

71

-

-

-

+

68

,

69

+

-

-

+

69

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

70

+

-

-

+

70

~

66

-

-

-

-

71

;

0

+

-

+

+

72

int

76

-

-

-

-

73

float

77

-

-

-

-

74

char

78

-

-

-

-

75

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

79

-

-

-

+

76

int

0

+

-

+

+

77

float

0

+

-

+

+

78

char

0

+

-

+

+

79

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

0

+

-

+

+

80

~

0

-

-

+

-

81

}

0

+

-

+

+

Таблица разбора java

Ожидаемый терминал

Переход

Принять

В стек

Из стека

Ошибка

1.

~

2

-

-

-

-

2.

~

7

-

-

-

-

3.

~

12

-

-

-

-

7.

using

9

-

-

-

-

8.

~

11

-

-

-

-

9.

using

10

+

-

-

+

10.

~

7

-

-

-

-

11.

~

3

-

-

-

-

12.

class

16

-

-

-

-

13.

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

18

-

-

-

-

14.

}

21

-

-

-

-

15.

~

22

-

-

-

-

16.

~

24

-

+

-

-

17.

~

12

-

-

-

-

18.

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

19

+

-

-

+

19.

~

37

-

+

-

-

20.

~

12

-

-

-

-

21.

~

0

-

-

+

-

22.

~

51

-

+

-

-

23

~

12

-

-

-

-

24

~

25

-

-

-

-

25

class

26

+

-

-

+

26

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

27

+

-

-

+

27

~

32

-

+

-

-

28

{

29

+

-

-

+

29

~

12

-

+

-

-

30

)

31

+

-

-

+

31

;

0

+

-

+

+

32

:

34

-

-

-

-

33

~

36

-

-

-

-

34

:

35

+

-

-

+

35

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

0

+

-

+

+

36

~

0

-

-

+

-

37

->

40

-

-

-

-

38

(

44

-

-

-

-

39

;

46

-

-

-

+

40

->

41

+

-

-

+

41

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

42

+

-

-

+

42

~

47

-

+

-

-

43

;

0

+

-

+

+

44

~

47

-

+

-

-

45

;

0

+

-

+

+

46

;

0

+

-

+

+

47

(

49

-

-

-

-

48

~

80

-

-

-

-

49

(

50

+

-

-

+

50

)

0

+

-

+

+

51

~

52

-

-

-

-

52

~

72

-

+

-

-

53

~

82

-

-

+

-

54

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

55

+

-

-

+

55

~

56

-

-

-

-

56

(

58

-

-

-

-

57

~

65

-

-

-

-

58

(

59

+

-

-

+

59

)

60

+

-

-

+

60

{

61

+

-

-

+

61

~

12

-

+

-

-

62

return

63

+

-

-

+

63

литерал

64

+

-

-

+

64

;

81

+

-

-

+

65

~

66

-

-

-

-

66

,

68

-

-

-

-

67

;

71

-

-

-

+

68

,

69

+

-

-

+

69

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

70

+

-

-

+

70

~

66

-

-

-

-

71

;

0

+

-

+

+

72

int

76

-

-

-

-

73

float

77

-

-

-

-

74

char

78

-

-

-

-

75

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

79

-

-

-

+

76

int

0

+

-

+

+

77

float

0

+

-

+

+

78

char

0

+

-

+

+

79

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

0

+

-

+

+

80

~

0

-

-

+

-

81

}

0

+

-

+

+

82

*

84

-

-

-

-

83

~

85

-

-

-

-

84

*

0

+

-

+

+

85

~

0

-

-

+

-


Разработка программы

Классовая модель


Диаграмма прецедентов

Диаграмма классов

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4098
Авторов
на СтудИзбе
673
Средний доход
с одного платного файла
Обучение Подробнее