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


Разработка транслятора в среде 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 мильонов к студенческой карме :

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

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

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

Реферат Маркетинговые исследования по стеклобанкам ООО Брянск-Стекло
Реферат An Analysis Of The Term Actually Incurred
Реферат Расчет усилителя звуковой частоты
Реферат Пенсії за віком Умови призначення пільги особливості призначення
Реферат Brady Bill Ii Essay Research Paper More
Реферат Аудиторская проверка расчетов с поставщиками,покупателями, дебиторами и кредиторами
Реферат Каково значение анализа финансовой отчетности для принятия управленческих решений
Реферат Проблемы и перспективы повышения эффективности разработки нефтяных месторождений
Реферат Анализ Ростовской области
Реферат Аудит организации бухгалтерского учета и учетной политики предприятия 2
Реферат Розрахунок обємного напруженого стану в точці тіла
Реферат Соціально-культурний комплекс України
Реферат Анализ финансовой деятельности ОАО "Эмбамунайгеофизика"
Реферат Политическая и государственная власть
Реферат Аудит в условиях компьютерной обработки данных КОД