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


Разработка транслятора в среде 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 сознательно отказались.
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.     Класс зарезервированных слов:
2.1     Для C#
using,class, int, float, char, public, protected, private, return, namespace
2.2     Для Java
using,class, int, float, char, public, protected, private, return
3.     Классзнаков операций и разделителей:
()       {}     :      ;        =       ->    .       ,        ‘        *
4.     Класслитералов:
Литерал –целочисленная или текстовая константа.Структура таблицы идентификаторовимя номер в классе тип
 
 
 
 
Структура таблицы литераловимя тип  Разработка синтаксического анализатораГрамматика языков
В данном проектеисследуется лишь малая часть возможностей и особенностей вышеуказанных языков.В связи с этим спроектированные грамматики для этих языков будут включать лишьте структуры языка, которые нам необходимыГрамматика С#
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. } + - + + 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. ~ - - + - 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 идентификатор 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 ; + - + + 72 int 76 - - - - 73 float 77 - - - - 74 char 78 - - - - 75 идентификатор 79 - - - + 76 int + - + + 77 float + - + + 78 char + - + + 79 идентификатор + - + + 80 ~ - - + - 81 } + - + +
 Таблица разбора 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. ~ - - + - 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 ~ - - + -  Разработка программыКлассовая модель/>/> Диаграмма прецедентов/>/>/>/>

Диаграмма классов
/> 
Анализ результатов работы программы и выводы
 
Обаанализируемых языка – объектно-ориентированные, с синтаксисом, унаследованнымот C++, но значительно переработанным. Следовательно, они имеют много общего,например, при анализе проектов, мы используем один общий класс разделителей изнаков операций.
Классызарезервированных слов для каждого языка отличаются. В данном проектеисследуется лишь малая часть возможностей и особенностей вышеуказанных языков.В связи с этим, классы зарезервированных слов для этих языков будут включатьлишь те ключевые слова и операторы, которые нам необходимы.
Проектпозволяет проанализировать взаимодействие между классами и вывести результат вфайл *.xml. Достаточно много времени было потрачено именно на выводрезультата в *.xml, так как ранее с подобными задачами не сталкивались.
Приреализации были выполнены критерии ООП и модульности, расставлены комментарии(по атрибутам, методам, по параметрам методов, классам).
Проект можетсуществовать как автономное приложение, однако, на мой взгляд, его можнодополнить и доработать функционально, расширить классы зарезервированных слов,внести изменения в LL(1) – грамматику и т.д.
На данномэтапе разработки программа работает корректно, четко выполняет поставленныетребования. 
Списокиспользуемой литературы
 
1.   Р. Хантер Проектированиеи конструирование компиляторов
2.   www.linuxcenter.ru/lib/articles/programming
3.  Джеффри Рихтер CLR via C# // М.,Издательство «Русская редакция», 2007
4.  http://javaportal.ru/
5.  Конспект лекций по ТОПТ


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

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

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

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