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

-

-

+

-


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

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


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

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

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее