|
gathx使用unicode字符集。
gathx严格区分大小写。
gathx忽略多余空白,空白可以用于缩近和排版。
gathx语句行以英文分号";"结束。
gathx预编译语句不参与程序运行,仅在编译前执行。预编译语句用#开头。
gathx的注释有单行注释和多行注释,单行注释以双斜杠"//"开头,多行注释以"/*"开头,"*/"结束。
gathx的字面量:(字面量实际由编译器识别)
1,布尔(boolean):TRUE,FALSE.//必须大写。内置的常量。
2,整数(integer):十进制(0开头会被认为是十进制),十六进制(0x开头),二进制(0v开头),八进制(0e开头)
3,实数(real):小数方式(必须且只能带一个小数点),科学记数法([小数部]E[10的N次方部])
4,字符串(string):双引号引起来。
5,集合(enum):用"|"连接的离散的数据。
gathx的标识符:以字母数字和下划线组成,不能由数字开头
gathx的保留字;(等待补充)
gathx是弱类型语言:变量对存放的是什么类型不要求,不过要求数据结构一致。
gathx有语句块的概念,用{}括起来的语句是一个block,即语句块。
gathx允许匿名,如果单独地存在一个字面量,则认为是一个初始化的匿名变量。
三种数据结构:对应的变量 赋值约束 命名风格
值: 4字节,32位 字面量或其他值 小写
对象:4字节,32位指针:存放对象的内存地址 其他对象,构造函数 大写首字母
数据:8字节,32位指针,32位整数表示长度 字面量,ptr:|int:集合 其他数据 强制以$开头
运算符:
bits:
<<左移 >>右移 ||按位或 &&按位与 !!按位非
boolean:
&与 |或 !非 *异或 ^等价 ~蕴涵
integer:
+加 -减 *乘 /除 %求模 ^乘方
real:
+加 -减 *乘 /除 ^乘方
条件运算:?开始,空白结束
<小于 <=小于等于 =等于 ==等同 !=不等于 >大于 >= 大于等于
成员运算符;. -> 指针专用
寻址数据:<开始偏移,结束偏移>基址
求址:在变量名后跟$。
一种内置对象:集合
离散的值用|来连接起来就是一个集合,集合是有序列的。
集合?条件 可以得出一个值。根据条件的计算结果对集合的大小求模来选择出在集合中位于某位置的值。例:
yes|no?!input;
如果写成"yes|no?input"那就错了,写成"no|yes?input"也不好,因为如果input的值不是1也不是0的话,结果有出错的可能。
其实可以更多的选择,例:
weekday = {Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday} //花括号是可选的
weekday.inquire(int:n)return weekday?n
集合的操作:
A^B 求交集 A+B 求并集 A-B 差运算 A=B 赋值 ?A=B判断AB是否相等 ?A==B判断AB是否为同一集合 a@A属于判断
> >= < <= 子集判断 A<-a插入元素 a<-A删除元素 如(A?1)<-A;它的值就是A?1
gathx的过程控制
1,选择分支语句
if 条件(注意条件需要带?前缀) 语句
else 语句
当然是可以嵌套书写的
2,循环
普通循环
loop(表达式)语句 //和while差不多。如loop(10--) dosomething();//其中10是一个匿名变量哦。
针对循环
for(;;)这个循环非常地方便,但是请你不要这样用它,如for(i=0;i<9;i++)dosomething();这样的话不如用loop循环。
通常在for循环的括号中有一个变量在循环体内被大量使用,而括号内的语句对该变量进行更新。
跳转控制
break 可选的条件//跳出语句块到下一句执行
continue 可选的条件//重新回到语句块的第一个语句开始执行
3,在c语言中有switch-case语句,其实是通过查表实现的。所以速度是非常地快的。当case的数量超过一个值后,效果非常地明显。当然它的效率需要case中的离散值尽量不要太离散了。而在gathx中,使用匿名集合代替了它。
函数的导入:
一,从库文件导入:[函数原型]@"[路径]"
函数的定义:
([可选的引参表])[函数名]([可选的形参表]){语句} 如:
(a,b)swap{
temp t = a;
a = b;
b = t;
}
max(a,b){
return a|b?uint32:(a<b);
}
从前面的例子已经可以看出了定义函数的函数名可以是一个已经声明过的标识符+"."+新的标识符,或只是用新的标识符。
函数的参数表有两个,一个是引参表,一个是形参表。引参在实际传值时使用引用传值,形参使用拷贝传值。
不能写函数的返回类型,函数的返回类型由实际的返回语句来决定。函数的引参表中如果只有一个参数则可以省略括号。形参表的括号不能省略。参数表中的参数可以带类型约束也可以不带。类型约束可以使用简写。
参数表中的参数可以用逗号隔开,也可以使用分号隔开,如果使用分号隔开,则在调用函数的时候,必须显式地写明传值的实参和形参对。参数表只能使用逗号或分号中的其中一种来做分隔符。例:
$DATA(ptr:adress,int:length){
return $DATA = <0,int:adress+length>adress;
}
//
s = "Hello World";
$s = DATA(adress=s$,length=s.length-1);
如果"."前面的标识符是一个类型
函数内部函数名作为返回值的存放变量。该变量是函数隐含的引参。引用等号左边的变量。
return作为函数返回的关键字,可以跟返回表达式。函数返回后,引参的值不会消失,形参会被销毁。
函数可以嵌套定义,子函数只能被上一层父函数调用,如果子函数在定义的时候就需要调用一次,就在函数名前加上"!"号。子函数可以使用父函数的临时变量。函数定义不能交叉。例:
main(){
int:a,b;
!input() scanf("%d%d",a$,b$);
!output() printf("较大值是%d",max(a,b));
loop{
input();
output();
}
}
函数的函数体如果只有一句就可以省略花括号。
gathx中函数可以递归调用。
库定义
#library 库名{
}
作用域限定符
#( 局部作用域
#[ 文本作用域
#{ 工程作用域
结构体
#struct 结构体名 [定长集合]
gathx支持重载:重载的函数要求不能有调用冲突,即无法确定具体时候该调用哪一个。
gathx支持模版:
#tempate<type T> //T是一个有关类型的集合
gathx支持虚函数:
gathx支持继承:
gathx支持类的封装:
#)私有
#]保护
#}公有
//---------------------------
一个例子
handle:file:SeeScattered()
{
#binary adressing mode>>
openfile(SeeScattered);
temp $FILE = loadfile(SeeScattered)hnd2ptr;
temp $D;$B;
temp int:c,max,min;
for(int:i=0; i<32; i++)
{
int:n = bit:2>>i;
for($B[n*(i+1)]; $B$<$FILE; $B$++)
{
new$T[n]setbits(0);
for($D[i+1]; $D$<$FILE; $D$++)
{
T[int:D] = 1;
ifnot?T[int:D] c++;
}
del$T;
max = c|max?c>max;
min = c|min?c<min;
}
println("测试文件:%s\t测试位长:%d\t最大离散度:%d%%\t最小离散度%d%%",SeeScattered.filename,i,max/n,min/n);
}
closefile(SeeScattered);
#binary adressing mode<<
}
这个函数测试一个文件中的数据的离散度。
其中可以看出数据变量的用法。
数据变量去掉$号的话,就是指数据本身,数据变量的值为数据的长度(相对于单位长度的绝对长度)。数据变量使用下标(方括号)的话,表示一个单位长度的数据。数据变量后跟$是数据变量中的数据指针。
数据变量以寻址模式为环境,寻址模式有位寻址,字节寻址,字寻址。32位CPU的一字为32位,而64位CPU为64位。位寻址模式不是CPU本身的功能,它是GATHX方便编程而添加的功能,具体的实现比较复杂,所以一般应用不推荐位寻址模式。
函数调用的时候如果没有形参表,形参表的括号可以省略。
变量域有这些,
1,code:代码段
2,temp:栈
3,dync:堆内存
.... |
|