Для хранения откомпилированной Пролог-программы используются три класса 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, просмотров: 199.