Представление Пролог-программы в виде объектов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

Модуль 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 - модуль описания окна опций проекта.

 

Дата: 2019-07-24, просмотров: 169.