Краткое описание Innerfuse Pascal Script
Оформил: DeeCo
Автор: Николай Васильев
Innerfuse Pascal Script — встраиваемый в приложение
"движок" для выполнения скриптов непосредственно в программе.
Название
Innerfuse Pascal Script
URL
http://www.carlo-kok.com/projects.php?projectname=pascalscript
Распространение
FreeWare
Поддерживает:
- стандартные типы: Byte, Shortint, Char, Word, SmallInt, Cardinal, Longint,
Integer, String, Real, Double, Single, Extended, Comp, Boolean, Array, Record,
Variant;
- классы (также объявленные во внешнем скрипте);
- переменные, константы;
- библиотеки для работы с DLL, вызова функций Delphi, преобразований типов,
работы с визуальными объектами;
- стандартные выражения: Begin/End, If/Then/Else, For/To/Downto/Do, Case x
Of, Repeat/Until, While, With, Uses, Try/Except/Finally Exit, Continue, Break;
- функции, процедуры, параметры Array of Const, Var;
- позволяет одновременно в одном приложении запускать несколько экземпляров
PascalScript и при этом каждый из них могут между собой иметь интерфейс.
Как пишет автор, синтаксис Innerfuse Pascal Script
является практически тем же, что и в Delphi Object Pascal за
исключением указателей, которые в данном продукте не поддерживаются.
Сам "движок" не является компонентом, это - набор модулей (ifspas
(основной), ifs_utl, ifs_var, ifs_obj). Чтобы его использовать в своём
приложении, нужно:
uses
ifspas, ifs_utl, ifs_var;
var
ScriptEngine: TIFPasScript;
//В событии onCreate формы:
ScriptEngine := TIfPasScript.Create(nil);
//В событии OnDestroy формы:
ScriptEngine.Free;
//В событии, по котоорому запускается скрипт (исключая редактор,
//который содержит текст скрипта):
ScriptEngine.SetText(memo1.text);
Scriptengine.RunScript;
//Теперь можно осуществлять проверку ошибок
Наличествует обработка ошибок с помощью типа TIFSError.
TIFSError используется для запоминания текущей ошибки, выданной
при работе скрипта.
TIFSError = record
ErrorCode: TIfPasScriptError;
ErrorPosition: Longint;
ErrorParam: string;
ErrorModule: string;
end;
TIfPasScriptError - тип, содержащий коды ошибок. Имеется возможность
"отлавливать" целый набор ошибок, таких как:
- "Compile Time" Errors:
-
ENoError - нет ошибки
ECanNotReadProperty
ECanNotWriteProperty
EUnknownIdentifier
EIdentifierExpected
ESemicolonExpected
EBeginExpected
EDuplicateIdentifier
EUnexpectedEndOfFile
EColonExpected
ESyntaxError
EStringError
EErrorInStatement
EAssignmentExpected
ETypeMismatch
EErrorInExpression
ERoundOpenExpected
ERoundCloseExpected
EVariableExpected
ECommaExpected
EThenExpected
EPeriodExpected
EParameterError(RunScriptProc)
EToExpected
EDoExpected
EOfExpected
EEndExpected
EOpenBlockExpected
ECloseBlockExpected
EConstantExpected
EIsExpected
EIntegerExpected
ECloseRoundExpected
EUntilExpected
EClassNotAllowedHere
EClassTypeExpected
ECanNotOverride
EUnsatisfiedForward
EConstructorExpected
ENoInheritedAllowedHere
ECanNotReadOrWriteProperty
EObjectExpected
ECommentError
ECharError
EExceptExpected
EStringExpected
EUnitNotFound
ENotSupported
"Runtime" Errrors
EClassNotCreated
EOutOfRange
EDivideByZero
EExitCommand
EClassAlreadyFreed
EClassReferenceNotAssigned
EVariantIsNil
ECustomError
EOutOfMemoryError
Имеется возможность выполнения основных
математических операций, набор функций преобразований типов и работы со
строками, классы, подобые TList и TStringList.
При работе с классами поддерживаются свойства, наследование, полиморфизм.
Очень многие возможности продемонстрированы в демо-проекте, имеется
довольно подробный файл помощи, содержащий описание основных модулей и типов.
Резюме: довольно мощный инструмент для приложений, в
которых необходимо выполнять программирование "на лету". По всей видимости,
вполне способен устранить необходимость использования в своих приложениях MS
Script Control для подобных действий. Проект постоянно развивается, периодически
выходят обновления с исправлениями обнаруженных ошибок, а также с добавлениями
новых возможностей.
При беглом обзоре возможностей продукта явных недостатков обнаружено не
было, если не считать мелких недочётов в демо-скриптах (в некоторых пропущены
строки, из-за чего скрипт не работал, а выдавал сообщение об ошибке, но эти
недочёты в принципе очевидны, поэтому без труда устраняются).
|