close

Вход

Забыли?

вход по аккаунту

?

Пояснительная (Автосохраненный) (2)

код для вставкиСкачать
Содержание
Введение6
1 Описание языка
2 Лексический анализатор
3 Синтаксический анализатор
4 Абстрактный синтаксис
Заключение
Список использованной литературы
Приложение А Листинг кода
Введение
Компилятор - программный модуль, задачей которого является перевод программы, написанной на одном из языков программирования (исходный язык) в программу на язык ассемблера или язык машинных команд.
Большинство компиляторов переводят программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен компьютером. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора - эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).
Целью данной курсовой работы является изучение составных частей, основных принципов построения и функционирования компиляторов, практическое освоение методов построения составных частей компилятора для заданного входного языка; построение компилятора для подмножества язык Prolog.
Задачи данной курсовой работы:
- описание функционально-логического языка prolog;
- построение лексического анализатора;
- построение синтаксического анализатора;
- абстрактный синтаксис
Описание языка
Пролог - язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.
Основными понятиями в языке Пролог являются факты, правила логического вывода и запросы, позволяющие описывать базы знаний, процедуры логического вывода и принятия решений.
Факты в языке Пролог описываются логическими предикатами с конкретными значениями. Правила в Прологе записываются в форме правил логического вывода с логическими заключениями и списком логических условий.
Факты в базах знаний на языке Пролог представляют конкретные сведения (знания). Обобщённые сведения и знания в языке Пролог задаются правилами логического вывода (определениями) и наборами таких правил вывода (определений) над конкретными фактами и обобщёнными сведениями.
Термы
Программа на Прологе описывает отношения, определяемые с помощью предложений. Как и в любом другом языке, ориентированном на символьные вычисления, предложения выстраиваются из термов, которые в свою очередь подразделяются на атомы, числа, переменные и структуры. Атом записывается со строчной буквы или заключается в кавычки, когда требуется запись с прописной буквы.
atom
'Atom'
Переменные, записывающиеся с прописной буквы, отличаются от переменных в процедурных языках программирования, они не связаны с конкретной ячейкой памяти, а скорее ближе к математической переменной.
X is 2 + 2.
Правила
В чистом Прологе предложения ограничиваются Дизъюнктами Хорна
Вывод :- Условие.
И читаются как: Заголовок ИСТИНА, если Тело ИСТИНА. Тело правила содержит ссылки на предикаты, которые называются целями правила. Встроенные предикаты ,/2, означающий оператор с двумя аргументами, определяющий конъюнкцию целей и ;/2 определяющий дизъюнкцию.
Факты
Предложения с пустым Телом называются Фактами. Пример факта:
Кот(Иван).
оно эквивалентно правилу:
Кот(Иван) :- ИСТИНА.
Арифметические выражения
В языке Пролог имеется ряд встроенных функций для вычисления арифметических выражений, основные из которых перечислены в таблице. ВыражениеИнтерпретацияX + YСумма X и YX - YРазность X и YX * YПроизведение X и YX / YДеление X на YX > YБольшеX < YМеньшеX = < YМеньше или равноX > = YБольше или равно
В соответствии с описанными конструкциями языка построена следующая грамматика:
GOAL->SLIST
SLIST->SENTENCE . SLIST
SLIST-> ε
SENTENCE->FACT
FACT->FACT1 RULE
RULE->:- FLIST
RULE-> ε
FACT1-> ids ( TLIST )
TLIST->TERM TL
TL->, TLIST
TL-> ε
FLIST->FACT1 FL
FL->, FLIST
FL-> ε
TERM-> TERM1 TT
TERM->FACT1
TERM1-> idb
TERM1-> num
TT-> SIGN TERM1
TT-> ε
SIGN-> +
SIGN-> -
SIGN-> *
SIGN-> /
SIGN-> <
SIGN-> >
SIGN-> =
Лексический анализатор
Основная задача лексического анализа - разбить входной текст, состоящий из последовательности одиночных символов, на последовательность слов, или лексем, т.е. выделить эти слова из непрерывной последовательности символов. Все символы входной последовательности с этой точки зрения разделяются на символы, принадлежащие каким-либо лексемам, и символы, разделяющие лексемы (разделители). В некоторых случаях между лексемами может и не быть разделителей. С другой стороны, в некоторых языках лексемы могут содержать незначащие символы.
Общая схема работы лексического анализатора такова. Сначала выделяем отдельную лексему (возможно, используя символы-разделители). Если выделенная лексема- ограничитель, то он (точнее, некоторый его признак) выдается как результат лексического анализа. Ключевые слова распознаются либо явным выделением непосредственно из текста, либо сначала выделяется идентификатор, а затем делается проверка на принадлежность его множеству ключевых слов. Если да, то выдается признак соответствующего ключевого слова, если нет- выдается признак идентификатора, а сам идентификатор сохраняется отдельно. Если выделенная лексема принадлежит какому-либо из других классов лексем (число, строка и т.д.), то выдается признак класса лексемы, а значение лексемы сохраняется.
Документ
Категория
Рефераты
Просмотров
41
Размер файла
24 Кб
Теги
пояснительная, автосохраненный
1/--страниц
Пожаловаться на содержимое документа