СодержаниеСодержание
Аннотация 3
1. Введение 3
1.1 Глоссарий 3
1.2 Описание предметной области 3
1.3 Неформальная постановка задачи 4
1.4 Обзор существующих методов решения 4
2. Требования к окружению 5
2.1 Требования к аппаратному обеспечению 5
3. Архитектура системы 6
4. Спецификация данных 7
5. Функциональные требования 7
6. Проект 7
6.1 Средства реализации 7
6.2 Модули и алгоритмы 7
6.2.1 Модули уровня синтаксического анализа 7
6.2.2 Модули уровня генерации кода 8
7. Реализация и тестирование 8
7.2 Тестирование 8
Заключение 9
Список литературы 10
Источники информации по языкам программирования 10
Источники информации по разработке расширения 10
Прочие источники 10ВведениеАннотация
Работа представляет собой внедрение в существующий компилятор языка Паскаль расширения инструмента для работы с данными перечислимых типов, призванного сделать возможным его применение и для данных строковых типов.
1. Введение
Глоссарий
Синтаксическое дерево – иерархическая упорядоченная структура, состоящая из узлов, хранящих информацию об объектах, используемых в программе.
Парсер – часть компилятора, обеспечивающая создание синтаксического дерева.
Генератор кода – часть компилятора, обеспечивающая создание ассемблерного кода исходной программы по ее синтаксическому дереву.
Case-структура – синтаксический объект, хранящий информацию о блоках инструкций, выполняемых в зависимости от конкретных значений рассматриваемой переменной.
Case-label – часть case-структуры, содержащая конкретное значение (или конкретные значения, если она задана в виде диапазона) рассматриваемой переменной.
GNU GPL – GNU General Public License – лицензия на свободное программное обеспечение, созданная в рамках проекта GNU в 1988г. Более подробную информацию можно найти по следующим ссылкам: [21], [22]
Open-source проект – программный продукт, распространяемый с предоставлением возможности его произвольной модификации.
Описание предметной области
Курсовая работа является частью международного проекта Free Pascal Compiler (далее FPC) – компилятора языка Паскаль [23], являющегося open-source проектом и находящегося под действием GNU GPL. Задача компилятора состоит в переводе программы, написанной на каком-либо языке программирования, на другой язык, например, машинный. Процесс перевода можно условно разделить на два этапа:
• Построение синтаксического дерева
• Генерация кода
Процесс построения парсером синтаксического дерева осуществляется по принципу «от большего к меньшему» – каждый узел представляет собой дерево, листья которого – атомарные узлы – содержат информацию о лексемах исходного кода. Таким образом, возникает необходимость в создании объектов, которые хранили бы информацию о какой-либо синтаксической конструкции исходного кода, например, цикле или условном блоке, и механизмов, которые позволяли бы эту информацию получать.
Одной из конструкций является case-структура. В разных языках программирования ее синтаксис различен, но схематично его можно представить следующим образом:
Если _выражение_ является:
_первым_выражением_, то выполнить _некоторый_блок_инструкций_.
_вторым_выражением_, то выполнить _некоторый_блок_инструкций_.
…
Иначе выполнить _некоторый_блок_инструкций_.
При этом в случае совпадения _выражения_ с каким-либо из перечисленных в зависимости от средств языка программирования может быть задано выполнение нижележащих блоков инструкций (case fall-through).ЛитератураСписок литературы
Источники информации по языкам программирования
[1] Общие сведения - http://en.wikipedia.org/wiki/Switch_statement
[2] PHP - http://www.w3schools.com/PHP/php_switch.asp
[3] Ada - http://www.adaic.org/whyada/intro4.html
[4] Ada - http://www.adaic.org/docs/95style/html/sec_10/10-5-3.html
[5] Ada - http://faculty.cs.wwu.edu/reedyc/CS141_Spring_2005/Lectures/CS141_Scalar_Case.html
[6] Basic - http://www.cerritos.edu/jwilson/cis_186/Language_Resources/VB_Select_Case_Statement.pdf
[7] SQL - http://www.4guysfromrolla.com/webtech/102704-1.shtml
[8] KSM-Scheme - http://square.umin.ac.jp/hchang/ksm/ref/ksm_13.html
[9] Modula-3 - http://graphics.cs.columbia.edu/modula3/tutorial/www/m3_32.html
[10] Lisp - http://www.n-a-n-o.com/lisp/cmucl-tutorials/LISP-tutorial-17.html
[11] Perl 6 - http://perl.active-venture.com/lib/Switch.html
[12] Lua - http://lua-users.org/wiki/SwitchStatement
[13] Ruby - http://www.ruby-doc.org/core/classes/String.html
[14] Java - http://www.npksv.ru/soft/java/glava9.php
Источники информации по разработке расширения
[15] Способы разработки - http://www.lazarus.freepascal.org/pipermail/lazarus/2009-March/023369.html
[16] Способы разработки - http://www.lazarus.freepascal.org/pipermail/lazarus/2009-March/023370.html
[17] Дискуссии по разработке - http://lists.freepascal.org/lists/fpc-devel/2009-May/016751.html
[18] Дискуссии по разработке - http://lists.freepascal.org/lists/fpc-devel/2009-May/016752.html
[19] Дискуссии по разработке - http://lists.freepascal.org/lists/fpc-devel/2009-May/016753.html
[20] Дискуссии по разработке - http://lists.freepascal.org/lists/fpc-devel/2009-April/016692.html
Прочие источники
[21] GNU GPL - http://www.gnu.org/copyleft/gpl.html
[22] GNU GPL, Wikipedia - http://ru.wikipedia.org/wiki/GPL
[23] FPC homepage - http://freepascal.org/
|