Рефераты. Интерпретатор языка Пролог

procedure AddVariable(v:TPrologVariable) - добавление переменной в список переменных;

function AddNewVariable:TPrologVariable - создание и добавление новой переменной в список;

procedure DeleteVariable(n:integer) procedure DeleteVariable(vName:string) procedure DeleteLastVariable - удаление переменной по ее индексу или по имени, либо последнюю переменную в списке;

function VariableByName(vName:string):TPrologVariable - доступ к конкретной переменной по ее имени;

property Variables[ind:integer]:TPrologVariable - свойство, оргназиующее доступ к переменным как к массиву переменных.

2.5.2 Стандартные функции и предикаты

Все стандартные функции и предикаты имеют одинаковые параметры.

Объявление функции выглядит следующим образом:

TStdFunction=function (Args:TPrologVariables):TPrologVariable;

Args - пакет с входными параметрами.

Функция возвращает значение в виде переменной TPrologVariable.

Объявление функции, выполняющая работу предиката:

TStdPredicate=function (VarPacket:TPrologVariables; BackTracking:Boolean):Boolean;

VarPacket - пакет с параметрами к предикату

BackTracking - логическая переменная, которая установлена в True, если предикат был вызван на обратном пути алгоритма бэктрекинга.

Функция возвращает логическое значение, которое должен возвратить предикат после своего выполнения.

2.6 Представление Пролог-программы в виде объектов

Для хранения откомпилированной Пролог-программы используются три класса TPrologTerm, TPredicateClause и TProgramPredicate.

TPrologTerm служит для хранения одного условия внутри предложения. В нем хранится тип условия (выражение, предикат, база данных), позиция условия в тексте Пролог-программы, а также указатель (Data) на объект представляющий данное условие (TSubTermPredicate, TSubTermExtData, TSubTermExpression).

TSubTermPredicate служит для хранения условий-предикатов. В данном классе есть следующие поля:

Name :String - имя предиката;

StandardPredicate :Boolean - True - если предикат стандартный;

Params :TVariablesArray - параметры для вызова предиката;

NoInverse :Boolean - признак наличия или отсутствия инверсии перед вызовом предиката.

TSubTermExtData аналогичен классу TSubTermPredicate за исключением того, что в нем нет поля StandardPredicate.

TSubTermExtData предназначен для представления арифметических выражений. Он представляет собой рекурсивный объект с полями LeftHand и RightHand для представления выражений левой и правой частей выражения. Данный класс содержит следующие поля:

Operation :TExpressionOperation - тип операции;

FuncName :String - имя функции, если Operation=eoFunction;

Operand :TPrologVariable - переменная или константа, если Operation=eoVariable;

LeftHand :TSubTermExpression - левая часть выражения;

RightHand :TSubTermExpression - правая часть выражения

FuncParams :array of TSubTermExpression - параметры функции, если Operation=eoFunction.

TPredicateClause хранит в себе одно предложение. Параметры предложения хранятся в массиве Params, а условия - в Terms.

TProgramPredicate хранит полную информацию о предикате. Объект этого класса используется как на этапе компиляции, так и на этапе интерпретации. Он хранит имя предиката (Name), типы параметров, текст предиката, все лексемы предиката, а также массив с предложениями предиката.

Класс TPrologProgram хранит всю информацию о Пролог-программе:

Описания типов (Domains);

Описания баз данных (ExtData);

Предикаты (TProgramPredicate);

Массив со стеком (Stack);

Массив с контрольными точками (BreakPoints);

Имя запускаемого предиката (StartPredicate);

Флаг работы программы (OnTheRun).

2.7 Основные модули

Модуль CompileUnit. В данном модуле определяется класс пролог-программы - TPrologProgram, а также два класса, использующихся при запуске интерпретатора: TStackNode и TSubStackNode. Модуль CompileUnit является ядром интерпретатора.

Модуль ProgramClasses. В данном модуле описываются основные классы, использующиеся в объектах TPrologProgram, TStackNode и TSubStackNode как контейнерные:

TLexemRecord - представляет одну лексему, выделенную из текста программы;

TPrologVariable - представляет переменную во время выполнения пролог-программы.

TPrologVariableList - контейнерный класс, использующийся в TPrologVariable, для представления списков;

TPrologVariableStruct - контейнерный класс, использующийся в классе TPrologVariable, для представления структур;

TPrologVariables - класс, представляющий собой список переменных TPrologVariable с возможностью доступа к переменной по имени;

TSubTermPredicate - класс использующийся в TPrologTerm для представления обычного предикатного условия в предложении;

TSubTermExtData - класс использующийся в TPrologTerm для представления предикатного условия вызова базы данных в предложении;

TSubTermExpression - класс использующийся в TPrologTerm для представления арифметических выражений в предложении;

TPrologTerm - класс использует TSubTermPredicate, TSubTermExtData, TSubTermExpression как контейнерные для представления одного условия в предложении;

TPredicateClause - использует массив объекстов TPrologTerm и TPrologVariable для представления одного предложения в программе;

TProgramDomain - класс использующийся в TPrologProgram как контейнерный для описания типов;

TProgramExtData - класс использующийся в TPrologProgram как контейнерный для описания баз данных;

TProgramPredicate - класс использующийся в TPrologProgram как контейнерный для описания предикатов;

TPrologFile - класс использующийся в TPrologProgram как контейнерный для описания файлов открытых во время выполнения программы;

Модуль PrologRunTime описывает класс ошибок TRunTimeError, а также все функции и встроенные предикаты Пролога.

MainFormUnit - модуль описания главной формы TMainForm;

ProgFormUnit - модуль описания окна инспектора TProgForm;

DomConstrFormUnit - модуль описания конструктора типов TExtDataForm;

ExtDataFormUnit - модуль описания конструктора баз данных TExtDataForm;

PredicateConstrFormUnit - модуль описания конструктора предикатов TPredicateConstrForm;

EditorFormUnit - модуль описания окна редактора TEditorForm

ConsoleUnit - модуль описания окна консоли TConsole;

ErrorsFormUnit - модуль описания окна ошибок компиляции TErrorsForm;

StackFormUnit - модуль описания окна стека программы TStackForm;

RunTimeDebugFormUnit - модуль описания окна отладки программы TRunTimeDebugForm;

BreakPointsFormUnit - модуль описания окна контрольных точек TBreakPointsForm;

ProjectOptionsFormUnit - модуль описания окна опций проекта.

2.8 Демонстрационная программа по выбору конфигурации компьютера

На вход программы с клавиатуры поступают задачи, которые должен будет решать выбираемый компьютер. По полученным данным программа выбирает оптимальную конфигурацию для заданного набора задач (тип процессора, частоту процессора, объем оперативной памяти, размер видеопамяти, минимальный размер винчестера, диагональ монитора, а также список дополнительный устройств, таких как звуковые карты, CD-ROM приводы и прочее).

В программе используются две базы данных.

База данных базовых конфигураций ("Configs.db"), в которой содержатся оптимальные конфигурации для каждой из элементарных задач.

Таблица 2.1.

Имя поля

Тип поля

Комментарий

Task

String[33]

Название задачи

Frequency

Integer[4]

Частота процессора

Processor

String[17]

Тип процессора

Memory

Integer[4]

Размер ОЗУ

VideoMemory

Integer[4]

Размер видеопамяти

HDD

Integer[4]

Размер винчестера

MonitorSize

Integer[4]

Диагональ монитора

Addition1Name

String[17]

Название 1-го дополнительного устройства

Addition1Value

String[9]

Характеристика 1-го дополнительного устройства

Addition2Name

String[17]

Название 2-го дополнительного устройства

Addition2Value

String[9]

Характеристика 2-го дополнительного устройства

Addition3Name

String[17]

Название 3-го дополнительного устройства

Addition3Value

String[9]

Характеристика 3-го дополнительного устройства

Addition4Name

String[17]

Название 4-го дополнительного устройства

Addition4Value

String[9]

Характеристика 4-го дополнительного устройства

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.