1. Description
-------------------
The module PASCALC.DCU is the Pascal-like language interpreter for Delphi.
The basic differences from standard Pascal the following:
- All variables stored as variants.
- It's no need to declare variables, labels and functions. PASCALC creates
variables dynamically on first assignment. Variable type depends on the
last value assigned, type checking is not carried out.
- Expressions syntax:
Arithmetic operators: +, -, *, /, ^ (power), SHL, SHL
Bitwise operators: BITOR,BITAND,BITXOR,BITNOT
Logical operators: >, <, >=, <=, =, <>, AND, OR, NOT,
constants TRUE and FALSE.
Operators precedence standard, you can use parentheses.
- Statements supported:
BEGIN... END
IF... THEN... ELSE
CASE
FOR... TO/DOWNTO... DO
WHILE... DO
REPEAT... UNTIL
BREAK
CONTINUE
GOTO
EXIT
USES
INCLUDE
- All reserved words are declared in interface section as string array.
You can change them to anyone others. All identifiers should be different
(except assignment and equation, they may be the same).
- Multi-dimensional arrays supported. Array items are variables whose names
consist from array name and indexes (in brackets). Array items properties
same as the simple variables. It's no need to declare arrays. Array index
continuity is not requred. It's possible to access string as char array.
You can assign chars or numbers in range 0..255 to string characters.
Array name should be unique, simple variable MyArr and array item MyArr[1]
can't exist at the same time. This rule allows to distinguish access to
1-st character of string variable MyArr (MyArr[1]) from the accees to
the first item of array MyArr. To access character of string array item,
character index should be written in brackets after item name, for example
MyArr[1,2][3].
- All build-in functions are user-defined. Module pasfunc.pas contain
example of PASCALC implementations for common Delphi functions. You can use
this functions and write your own implementations for necessary functions.
There is no need to declare parameters for user-defined functions, therefore
it's types and amount are not limited. If necessary you can provide type
checking inside function code. Interpreter calculates all parameter values
and creates temporary values list (TVarList). Names of var-parameters in this
list are 'VAR', otherwise 'VALUE'. After function call interpreter updates
values for var-parameters. Function result type not checked, one function can
return number as well as string. Functions can be called as procedures (without
result usage).
- Procedures and functions (in sense of the subroutines on interpreter language)
are supported. The function heading specifies only names of formal parameters,
without parameters types and pass method (var or value). Also, function's result
types are not declared. To return function result you should assign value to
variable "result".
If actual parameter is variable (not expression), it considered as var-parameter.
In this case assigning new value to this parameter inside procedure or function
will affect the actual parameter variable.
At the same time, all interpreter global variables inside a function or procedures
looks like local variables, with the same initial values as global ones.
You can change this values inside procedures (functions), but it's don't affect
the global variables. All new variables created inside procedures and functions
are local, and will be destroyed after exiting.
Therefore, it is possible to use any names for local variables, without conflicts
with the global variables.
For libraries implementation, it is possible to use operators USES and INCLUDE.
Syntax: USES 'filename';
INCLUDE 'filename';
INCLIDE and USES are parsed by pre-processor before script execution.
INCLUDE inserts text from file 'filename' into the script, USES loads
procedures and functions declarations.
2. License
----------
This software is provided as it is, without any kind of warranty given.
The author can not be held responsible for any kind of damage, problems etc,
arised from using this software. PASCALC interpreter is shareware product.
Unregistered version has no time or functionality limitations, but can
show info screen.
If you want get source code, you should register PASCALC and get registration code.
Use your registration code as password for source archive (Source\pascsrc.zip).
Address for online registration (price $20):
https://www.regnow.com/softsell/nph-softsell.cgi?item=2608-2
You can modify PASCALC source code as you need, distribute executable files
compiled with PASCALC source. But you can't distribute original or modified
PASCALC source code, .DCU units or libraries based on PASCALC source code.
3. PASCALC inteface
-------------------
unit pascalc;
{$F+,B-,R-}
interface
uses
Windows, Messages, SysUtils, Classes, Math;
type TToken =
(tEMPTY, tVR, tCON, tTRUE, tFALSE,
tEQU, tOR, tAND, tNOT, tXOR,
tCOMMA, tLBL, tNEQ, tGT, tLS,
tGTE, tLSE, tADD, tSUB, tMUL,
tDIV, tPWR, tLBR, tRBR, tLARR,
tRARR, tSEMI, tREM, tREMB, tREME,
tASSIGN, tBEGIN, tEND, tIF, tTHEN,
tELSE, tFOR, tTO, tDOWNTO, tDO,
tWHILE, tREPEAT, tUNTIL, tBREAK, tCONTINUE,
tEXIT, tGOTO, tSHL, tSHR, tPROC,
tFUNCT, tUSES, tINCLUDE, tCASE, tOF,
tCOMMA2);
type TTokenSet = set of TToken;
const
ResWords : array[TToken] of string[10] =
('', '', '', 'TRUE', 'FALSE',
'=', 'OR', 'AND', 'NOT', 'XOR',
',', ':', '<>', '>', '<',
'>=', '<=', '+', '-', '*',
'/', '^', '(', ')', '[',
']', ';', '//', '{', '}',
':=', 'BEGIN', 'END', 'IF', 'THEN',
'ELSE', 'FOR', 'TO', 'DOWNTO', 'DO',
'WHILE', 'REPEAT', 'UNTIL', 'BREAK', 'CONTINUE',
'EXIT', 'GOTO', 'SHL', 'SHR', 'PROCEDURE',
'FUNCTION', 'USES', 'INCLUDE', 'CASE', 'OF',
'..');
const
Alpha : set of char = ['_','0'..'9','a'..'z','A'..'Z','à'..'ÿ','¸','À'..'ß','¨'];
StrDelimiter : char = '''';
DecimalPoint : char = '.';
TokenDelimiter : char = #127;
type TVar = record
Name : string;
Value : variant;
end;
type TPVar = ^TVar;
type TVarList = class (TList)
destructor Destroy; override;
procedure ClearAll;
function AddVar(V:TVar) : boolean;
function AddValue(N:string; V:variant) : boolean;
function VarExist(N:string):boolean;
function VarIndex(N:string):integer;
function VarByName(N:string;var V:TVar) : boolean;
function SetVar(V:TVar) : boolean;
function SetValue(N:string; V:variant) : boolean;
procedure CopyTo(VL:TVarList);
end;
type TPVarList = ^TVarList;
type PProcessProc = procedure;
type PFunction = function(Sender:TObject; var A:TVarList; var R:TVar) : boolean;
type TFunc = record
Name : string;
Func : Pointer;
end;
type TPFunc = ^TFunc;
type TFuncList = class (TList)
destructor Destroy; override;
procedure ClearAll;
function AddFunction(N:string; F:Pointer) : boolean;
end;
type TProcedure = record
Name : string;
Body : string;
Params : string;
Result : boolean;
end;
type TPProcedure = ^TProcedure;
type TProcList = class(TList)
destructor Destroy; override;
procedure ClearAll;
function AddProc(Proc:TProcedure):boolean;
function ProcIndex(Name:string):integer;
function ProcByName(Name:string; var Proc:TProcedure):boolean;
end;
高级编程器软件(AsProgrammerr),使CH341再次焕发青春
需积分: 9 96 浏览量
2022-10-14
16:31:50
上传
评论
收藏 1.98MB ZIP 举报
stevenmaomao
- 粉丝: 3
- 资源: 13
最新资源
- (2005-2014期间)中国环境统计年鉴
- 2015高中信息技术excel操作题及素材(精品文档).xls
- SW3518S全协议快充USB Type-c接口电源模块硬件参考设计评估版硬件(原理图 +pcb)+封装库文件.zip
- 基于深度强化学习算法实现多星对区域目标观测的规划python源码+数据集+模型+超详细注释.zip
- RT1052+SDRAM(IS42S16160) +SIM7600CE(PCIE接口封装)控制板硬件(原理图+PCB)+封装库
- 2017大学英语四级词汇-excel-列表版(精品文档).xls
- 2017版国家医保药品目录(excel版)完整版.xls
- 基于STM32F103单片机设计的无刷电机控制板硬件(原理图+PCB+BOM)+MCU软件控制源码+文档资料.zip
- 肺结节检测数据集VOC+YOLO格式1186张1类别.zip
- Faster-RCNN基于知识蒸馏的目标检测模型增量深度学习方法python源码+项目运行说明.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0