Реферат по предмету "Информатика"


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

Введение
Тема, цель, актуальность работы
Анализ проектов, реализованных на языках программирования 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 сознательно отказались.--PAGE_BREAK--
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 := 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 е    продолжение
--PAGE_BREAK--
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
-
-
-    продолжение
--PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK----PAGE_BREAK--
-
+
10.
~
7
-
-
-
-
11.
~
3
-
-
-
-
12.
class
16
-
-
-
-
13.
идентификатор
18
-
-
-
-
14.
}
21
-
-
-
-
15.
~
22
-
-
-
-
16.
~
24
-
+
-
-
17.
~
12
-
-
-
-
18.
идентификатор
19
+
-
-
+
19.
~
37
-
+
-
-
20.
~
12
-
-
-
-
21.
~
-
-
+
-
22.
~
51
-
+
-
-
23
~
12
-
-
-
-
24
~
25
-
-
-
-
25
class
26
+
-
-
+
26
идентификатор
27
+
-
-
+
27
~
32
-
+
-
-
28
{
29
+
-
-
+
29
~
12
-
+
-
-
30
)
31
+
-
-
+
31
;
+
-
+
+
32
:
34
-
-
-
-
33
~
36
-
-
-
-
34
:
35
+
-
-
+
35
идентификатор
+
-
+
+
36
~
-
-
+
-
37
->
40
-
-
-
-
38
(
44
-
-
-
-
39
;
46
-
-
-
+
40
->
41
+
-
-
+
41
идентификатор
42
+
-
-
+
42
~
47
-
+
-
-
43
;
+
-
+
+
44
~
47
-
+
-
-
45
;
+
-
+
+
46
;
+
-
+
+
47
(
49
-
-
-
-
48
~
80
-
-
-
-
49
(
50
+
-
-
+
50
)
+
-
+
+
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
;
+
-
+
+
72
int
76
-
-
-
-
73
float
77
-
-
-
-
74
char
78
-
-
-
-
75
идентификатор
79
-
-
-
+
76
int
+
-
+
+
77
float
+
-
+
+
78
char
+
-
+
+
79
идентификатор
+
-
+
+
80
~
-
-
+
-
81
}
+
-
+
+
82
*
84
-
-
-
-
83
~
85
-
-
-
-
84
*
+
-
+
+
85
~
-
-
+
-     продолжение
--PAGE_BREAK--
Разработка программы
Классовая модель
Диаграмма прецедентов
/>
Диаграмма классов
/>
Анализ результатов работы программы и выводы
Оба анализируемых языка – объектно-ориентированные, с синтаксисом, унаследованным от C++, но значительно переработанным. Следовательно, они имеют много общего, например, при анализе проектов, мы используем один общий класс разделителей и знаков операций.
Классы зарезервированных слов для каждого языка отличаются. В данном проекте исследуется лишь малая часть возможностей и особенностей вышеуказанных языков. В связи с этим, классы зарезервированных слов для этих языков будут включать лишь те ключевые слова и операторы, которые нам необходимы.
Проект позволяет проанализировать взаимодействие между классами и вывести результат в файл *.xml. Достаточно много времени было потрачено именно на вывод результата в *.xml, так как ранее с подобными задачами не сталкивались.
При реализации были выполнены критерии ООП и модульности, расставлены комментарии (по атрибутам, методам, по параметрам методов, классам).
Проект может существовать как автономное приложение, однако, на мой взгляд, его можно дополнить и доработать функционально, расширить классы зарезервированных слов, внести изменения в LL(1)– грамматику и т.д.
На данном этапе разработки программа работает корректно, четко выполняет поставленные требования.
Список используемой литературы
Р. Хантер Проектирование и конструирование компиляторов
www.linuxcenter.ru/lib/articles/programming
Джеффри РихтерCLR via C# // М., Издательство «Русская редакция», 2007
javaportal.ru/
Конспект лекций по ТОПТ Ссылки (links):
www.linuxcenter.ru/lib/articles/programmingjavaportal.ru/


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Interstate Regulations Essay Research Paper Interstate Speed
Реферат Опорные конспекты по дисциплине Основы социологии и политологии
Реферат Экспертиза качества плодово-ягодных кондитерских изделий
Реферат Методика воспитания звуковой культуры речи дошкольников с помощью современных методов и приемов обучения
Реферат Судьба интеллигенции в революции на примере романа А. Фадеева «Разгром»
Реферат Формування комунікативно-мовленнєвих умінь під час вивчення лексики
Реферат Безбородко Александр Андреевич
Реферат Политическая философия античного мира и средневеко вья общая характеристика
Реферат Музейное строительство на советском Дальнем Востоке в 1920–1930-е годы
Реферат Моя родина - мой Казахтсан
Реферат Организационный механизм подготовки и принятия нормативных правовы
Реферат Создание условий для биотехнологического производства лекарственных средств
Реферат Расчет технико-экономического показателей на сборочном участке по изготовлению УАЗ-469 с годовой программой
Реферат Новые подходы к производству биологически безопасной мясной продукции в цикле "корма – животные – сырье – готовый продукт"
Реферат «Порівняльний аналіз концепцій Бога в системах Пауля Тілліха І Генрі Нельсона Вімена», ставши доктором філософії. Глибокий вплив на Кінга у ці роки виявили праці священика І реформіста Вальтера Раушенбуша, Георга Гегеля, Генрі Торо, Едгара Брайтмена,