2311极语言高亮说明书

入门

安装目录下Sec.exeide.Sc编译器.
.sec为单文件二进制源码结构,.SEC.极为多文件文本结构,命令行:cmd Sc.exe 源码路径.

基础

整数变量也可以是万能指针,传送参数,参数只有整数和小数两种.
可在名称前面加@或&符号取变量或函数名指针地址,文本变量只取地址不用加.

变量

小程序片段之内的变量局部变量,之外全局变量.作用主要是用来存取数据,传递参数,算法运算等等.
局部变量只有整数,小数,浮点和文本这四种类型,变量类型间可使用等号相互转换,语法:变量一=变量二,把右边变量类型转换成左边变量类型数据.
转换文本时可以拼接.转换数值时可以用表达式.

变量类型

变量类型:整数,小数,浮点和文本,布尔,字符,字节,整形,正整形,整数,小数,文本,浮点,日期,大数,类型,数据表
十六进制数字,用$或者0x表示,$0到$FFFFFFFF.
转义字符略.可以用\把单个文字转换为编码值.

整数 时间=0@2018-8-15 12:00;
整数 提示="提示消息";
文本 内容(16)="$374727774367008C7A";
内容="最终结果:" + 数值 ".总共" + 次数 "次"
查字符(str,\s);

$时,16=>2进制
如下,细节见说明书.
运算符号和标点符号:+-*/|^&%?++--!=!=<><>>=<=>><<||&&?@._"$::#\''///**/$0x0#0$0@()[]{}
指针操作:@~[][]%[]&反引反引%反引&()()%()&%&()$()!()###@#()#[]##_[]_[]%_[]&_[]$_[]!_[]#.().%.&.$.!.#.+.++<>
语法:程序段/结束/子类/数据表/读取表/检索/加数组/清零/调用/新建/对象/创建对象/控件对象/导入/引入/重命名/常量/类型/导出/返回/如果/如果是/否则/判断/循环/循环在/循环于/循环数组/跳到/跳转/跳出/支持库/局部/保留/重置/销毁/置入/指令/传址/字节组/输出文件/列举/别名/程序版本/程序类型/程序资源/程序图标.

语法示例

小程序(整数 a,文本b,字节 c);
子类{整数 变量1,变量2;小程序 登陆(账号)...结束;}

数据表{整数 a,文本 b[16],字节 c;}自定义表头结构
读取表(数据库名,数据表头,[长度]);
检索(变量名,查询值,[长度]);
加数组(变量名,表名,[字段名]);
清零(变量名,长度,[设定值]);
调用 变量名(参数...);//动态调用dll.
角色=新建 玩家类(等级=1,性别=0);
对象 名称=对象名;
名称=创建对象 "WinHttp.WinHttpRequest.5.1"
对象名=控件对象 窗口名;控件对象 对象名,窗口名.
导入 StrStrI 支持库 "SHELL32.DLL",2;//有2个参数的函数
引入 "Windows.inc";
重命名 发送消息=SendMessage;//转换英文为中文.
常量 内容="SEC";
类型 Form{整数 hwnd;整数 WndProc;}
返回(N1* N2);
如果(消息=窗口关闭){停止(0);}
a =如果是(消息=0)10,500;
否则{返回(1);}
判断(消息)为 窗口关闭{停止(0);}
循环(10){...}
循环{...i--;}i=0停止;循环{...i+2;}(i=100)
循环在(a<1000){a++;}
For(i=0;i<100;i++){i从099,每次加1,循环一百次}
循环数组(ab){}
开头: .... 跳到 开头;
起点@ .... 跳转>起点;
整数 数组();重置 数组(20); 保留 数组(200);
整数 数组(); 重置 数组(200);
销毁 数组;
置入[字节 $68]; 置入[整数 $20];//相当于写机器语言
指令[6820088800];//连续的十六进制机器码
传址[$4001200,a];//写入指定内存位置
字节组 tmp[15,$20,60,128];
输出文件=exe//改扩展名.
列举 form{.s=1;.l=5;}//==form.s=1;form.l=5;
导入 信息框 别名 MessageBoxA lib "USER32.DLL",4;
程序类型 34//32+2.就是32位的控制台.
程序资源 10,"sec.jpg"//资源类型与文件名.
程序图标"sec.ico";

置入功能

置入指令类似于汇编DB/DW等,是在代码段插入指令数据.

置入[字节 15,20,40];
置入[整数 66,$204068AA];
置入[整形 $2040,88];
置入[小数 3.14];
置入[文本 "你好"];
置入[文本 50];
置入[地址 窗体];
置入[局部 参数];
置入[调用 加法];
置入[函数 信息框];
置入[@ 加法];

跳转.

数据表

直接读取数据到指定结构.
读取数据表是为批量读取数据库而设计的功能,可以自定义数据结构,然后无需使用ADO等对象,直接把数据读取到相应结构内存中.
只要把需要字段数据读取出来,还可直接改变数据类型.如数据库字段类型整数,程序需要把整数类型数据全部转换成小数类型.

同样的数值15,整数和单精度小数都占四字节,但是它们的数据却大不相同.程序定义为小数,数据库里是整数,就可以全部提取为小数数据.
读取后的数据表读写方法为:表名(行号).字段名,如:

lv=玩家表(0).等级;玩家表(3).职业=5;

表名.rows为行数,表名.cols为列数.
长(表名)获取类型结构每一行数据长度,表名.len申请数组长度,使用前需要重置 表名(数量).
申请长度数量要>=查询表的记录数,读取完数据之后,表名.rows为实际读取记录数.
数据表的序号是从0开始,100行记录就是按序号0-99获取.读取数据是一段连续存放内存,行列是连续整齐排列的.

文本,数组,指针操作

文本是一段文字数据,数组按数据类型连续排列数据,内存指针内存某个数据的位置.
它们都是用一个整数地址来表示所在位置,操作类似.

整数 s="sdkfskd";
s(0)=\b;

整数 m;//内存地址
m(13)=128;//13处写入.
a=m(10);//读取
m(13)%=32128;a=m(2)%;//读取写入2字节,用%
m(13)&=$AF32C128;如果(m(2)&=889654){};
//读取写入4字节,用&

读写内存地址

可用变量读写内存地址
变量只能是字节,整形,整数,小数4字节以内的数字类型.

如 文本 a="$32A4B8C6428B";字节 b;正整形 i;
b b>a+2;//就把a的第三位置`0xB8`,换成了`50`
文本 内容[64]="0123456789ABCDEF中华人民共和国";
整数 数值=内容
//数值得到数据`缓冲区`内存地址
数值=内容(0)
//从数据缓冲区读取第一字节数值,0这个字
数值=内容%
//从数据缓冲区读取两字节数据到数值变量,01这两个字
数值=内容&
//从缓冲区读取四字节数据,0123这四个字,(0)可以不写
数值=内容(2)
//从缓冲区的2字节后读取一字节数据,2这个字
数值=内容(2)%
//从缓冲区的2字节后读取两字节数据,23这两个字
数值=内容(2)&
//从缓冲区的2字节后读取四字节数据,2345这四个字
内容% =数值
//向缓冲区写入两字节数值,01被修改
内容& =数值
//向缓冲区写入四字节数值,0123被修改
内容(2)% =数值
//向缓冲区的2字节后写入两字节数值,23被修改
内容(2)& =数值
//向缓冲区的2字节后写入四字节数值,2345被修改
数值=#4
//#4是指针之后偏移4字节,就是读取4567这四个字
数值=#(4)
//#(4)是指针之后偏移4字节,小括号就是读取4这一个字
数值=#[4]
//#[4]是指针之后偏移4字节,中括号就是读取45这两个字
数值=#@4
//#@4是指针之后偏移4字节,就是4这个字的位置(取文本)
数值=##4
//#4是指针之后偏移4字节,就是读取456789AB这8个字(取浮点数)
.#6=数值
//#6是指针之后偏移6字节的浮点数,就是6789ABCD这八个字
.(6)=数值
//6是指针之后偏移6字节,读写操作6这个字
.%6=数值
//6是指针之后偏移6字节,读写操作67这两个字
.&6=数值
//6是指针之后偏移6字节,读写操作6789这四个字
.!6=数值
//6是指针之后偏移6字节,读写操作6789这四个字的小数值

记住指针位置,是变量缓冲区内最后读写操作的内存偏移位置.
还有中括号和~符号的指针操作,只记变量指针位置,不包括操作的偏移位置.
小括号可以读写操作整数,文本,数组,结构体和数据表等,中括号只能读整数和文本指针.

文本 内容[64]="0123456789ABCDEF中华人民共和国";
整数 数值=~内容
//数值得到数据缓冲区的前四字节数据,0123
数值=内容[0]
//从数据缓冲区读取第一字节数值,0这个字
数值=内容[2]
//从缓冲区的2字节后读取一字节数据,2这个字
数值=内容[2]%
//从缓冲区的2字节后读取两字节数据,23这两个字
数值=内容[2]&
//从缓冲区的2字节后读取四字节数据,2345这四个字
数值=`[4]
//`[4]是内容缓冲区向后4字节,就是读取4这个字
数值=`[4]%
//内容缓冲区向后4字节,百分号就是读取45这两个字
数值=`[4]&
//内容缓冲区向后4字节,连接号就是读取4567这四个字

数组和数据表包含子类名和方法

方法 意思
数组.指针 数据缓冲区指针
数组.长度 成员数量文本缓冲区大小
子类.长度 空间长度
数组.维数 第一维数组的长度
对象.类 关联的
对象.标识 IID标识
数据表.指针 数据缓冲区的指针
数据表.长度 可存储行数
数据表.行数 已读取数据的行数
数据表.列数 每行数据的列数
读取表 读取数据到数组缓冲区
加数组 某列数据加到一维数组

数组

数组,数据表和结构体都属于全局变量,数组可以是静态和动态两种
静态数组如:

整数 一(10);字节 二(5);

动态数组括号内为空,如整形().

结构体类型只支持是静态数组,静态数组不支持重置,保留和销毁.
数据表只支持动态数组,申请的数据清零的,支持重置,保留和销毁.

子类

子类要通过"新建"申请内存才能使用,数据不清零,只支持销毁.
子类和对象支持全局和局部变量,实体是一个整数指针变量.
子类代码需要单独一个模块文件来写,格式为:子类 名称{...}.

子类支持的变量类型:布尔/字符/字节/整形/正整形/整数/小数/浮点/大数/文本.
子类变量均可使用数组,下标长度必须是数字,不支持动态数组.
子类变量时不能赋值,未新建子类时变量的数据并不存在.
子类如果不包含变量,是不需要新建,不用申请内存空间
子类里面包括程序段,可直接使用子类内部的变量
子类书写完之后,以大括号}结尾,与命名子类后的{对应.
使用子类时先要新建子类,才可使用其变量和方法函数.

子类名 名称1 = 新建 子类名;
整数 名称2=新建 子类名

也可用赋值指向已存在的子类:

子类名 名称3=名称1;

子类变量用法:

整数 数一=名称1.变量名;
名称1.变量名=88;

传递参数时也可用子类:

程序段 测试(子类名 名称3)
名称3.变量=99;
变量9=名称3.读取(数据,4);
名称3.写入(内容)

销毁子类方法是:

销毁 名称2;

子类名子类实体要区分清楚

COM对象

COM对象申请方法是:

对象 名称5=对象名;
对象 任务=任务栏类;
//用对象结构
//或下面代码形式
对象 任务($44F3FD566DFDD011958A006097C9A090,$42F3FD566DFDD011958A006097C9A090,接口,计数,释放,初始化,添加,删除,激活,活动)

极语言库里已有的COM对象结构在说明书里有使用方法.
如:任务栏类,链接类,存储类,可查看具体说明

申请完对象变量,要用创建对象创建对象实体
语法是:

创建对象 任务;任务.初始化;任务.添加(窗口)
任务.删除(窗口);任务.激活(窗口),任务.活动(窗口)

对象不使用新建和销毁,释放对象写法是:

任务.释放;

全局变量和局部变量

小程序段内申请的变量,包括提交的参数都是局部变量.
子类或者数据表头内申请的变量属于子类变量.
其它地方(小程序和子类外)申请的变量是全局变量.

全局变量包括字符,字节,整形,正整形,整数,正整数,小数,浮点,大数和自定义类型.
局部变量目前只有整数,小数和文本这三种.
按参数传递任何变量时,均为4字节数字.

所以大于4字节的类型比如文本,浮点和自定义类型,提交的都是变量的地址,而不是.否则是按值传递的.

因此小程序的参数通常只有整数和小数这两种,文本提交过来也是个整数地址.

小数是提交参数时,要直接进行小数运算时,才需要特别指定.除此外,任何提交参数都可写成整数类型.

子类本身并没有特别定义,它可以是全局整数变量,也可是局部整数,也可以是整数数组.

全局变量编译程序时,提前数据区段申请的.局部变量仅在小程序段内有效,属于临时存储空间.

子类和数据表的变量,是在运行程序后,动态申请的内存区块.使用子类前,要用新建 子类名称

数据表相当于自定义二维数组,使用前要先"重置"数组长度,该长度不能小于所读取数据的行数.

数据表可使用数组的重置,保留和销毁方法,而子类只可用新建和销毁这两个方法.

子类和数据表的区别

子类申请的内存区域并不是清零的,所以新建的时候,可以用:

玩家=新建 角色类(等级=1,职业=2,性别=1);

来设置子类变量的数值,未清零内存数据随机的,即在新建子类时子类变量数值是不确定的.

而在重置长度后,数据表内存区域清零的,所有此时变量值都是0,数据表也可以用作自定义数组.
成员变量使用方法是:玩家表(0).性别,括号内行号也就是数组的标号,是从0开始计数的.

子类变量的使用方法是:玩家.性别.如果申请子类变量是数组形式,如:角色类 玩家()
也可以像数组一样,先

重置 玩家(1000),玩家(0)=新建 角色类;
玩家(0).性别=1;

但是销毁只能是先销毁一个成员,

销毁 玩家(0)
N=玩家(0);销毁 N;

子类内部,可不加前缀直接访问子类变量,如:

 等级=100;职业=3;xb=性别

等等.
全局变量,子类变量的名称是绝对不能重复的,重名就会优先判定为全局变量.

申请和使用局部变量

局部变量文本外都是4字节,文本可以大于4字节,但必须是4的整数倍.

局部变量最多可申请1-2M空间,不使用局部变量则不申请,少量使用时(限120字节)

局部整数和小数变量30个以内,文本按申请的长度算.需要更多变量时,变量前加局部或local.

并且放在小程序开头第一行,编译时,才好预计此小程序段需要申请多大栈空间.如:

局部 文本 ss(32);

局部全局变量区别是很大的,编程语法上尽量做到兼容使用,方便程序灵活处理.

局部全局文本都可像操作数组一样,读写其中每一字节.如:

文本 s(16)="abc";s(2)=\d;

也可像其它变量一样,写入数字.如:

s=0;//清空文本
s=$31323334;
//`文本开头`等于4321

因为十六进制反转的,最后的34写入字符第一字节,对应文字是4,用s(1)读取出来就是52.

更多细节,见说明书!

你可能感兴趣的:(极语言,极)