| jybox |
2011-12-12 23:36 |
jb256语言语法参考
JB256JB256是一个解释运行(本人没能力写编译器,但理论上可以编译运行),可以直接操作(虚拟)内存的偏底层语言.
256表示目前版本的JB语言只能进行256以内的无符号整数的算术运算,且只有256B的虚拟内存,不支持中文等多字节字符集.
ps.理论上,运算范围和内存空间可以无限大,只不过我们不建议用它编写过大的程序,因为这将会产生严重的连带副作用————蛋痛.
注意!由于本人能力有限,以上和以下的术语可能并不准确,请见谅.大家自行脑补 JB256没有标识符,只有下面3个关键字,4个运算符,和两个转义符号.
------------------------- 关键字,其实是3个寄存器(初值为0): jb (主控制器)负责执行命令 da (蛋A)寄存器A db (蛋B)寄存器B
运算符 ++ 值翻倍(乘2)(对应字节码0-63) -- 值减倍(除2)注:若出现小数,一律进位(对应字节码64-128) + 值加一(对应字节码129-191) - 值减一(对应字节码192-255)
转义符号,空格或者斜杠,作用是一样的: 当有两个连续加号的时候,解释器会认为它是一个“值翻倍”,如果你确实要表示两个“值加一”,请在它们中间用空格或斜杠分割
虚拟内存,JB256有256块虚拟内存,每块虚拟内存可以保存一个0-255的无符号整数。内存的初值为0 其中第256块(索引是255)是只读内存,内容始终是当前执行到的位置的指针
运行过程 jb、da、db分别在三个时间轴上运行,每个单位时间内,向前执行一个计算,然后以jb的值为命令号,da和db的值为参数,来执行系统调用。然后将执行指针向前移动一格,继续执行。 jb、da、db的命令长度必须等长,在运行的时候,他们会被加载到内存中,内存中储存的是它们的字节码(前面已提到)。 它们在内存中的位置是这样:jb1、da1、db1、jb2、da2、db2、jb3、da3、db3. 理论上可以存储75组命令(75*3=255,最后的一块是只读内存),但实际上,运行时你可以动态地擦写内存,写入命令,移动当前执行指针,或用这些内存存储数据
--------------------------- 命令表(命令号即为jb的值) 空 1、2、3、4、6、8 交换A和B的值 7 A+B,结果存储到A(B中存储进位次数) 16 A-B,结果存储到A(B中存储借位次数) 17 A*B,结果存储到A(B中存储进位次数) 18 A/B,结果存储到A(出现小数则进位) 19 A%B,结果存储到A 20 A&B,结果存储到A 21 A|B,结果存储到A 22 A^B,结果存储到A 23 A&&B,结果存储到A 24 A||B,结果存储到A 25 A^|B,结果存储到A 26 !A,结果存储到A 27 ~A,结果存储到A 28 将A的值写到内存B处 5 将内存B处的值读入A 9 从键盘读取A个字符写入到B处开始的内存中 10 显示从内存B处开始A个字符 11 从键盘读取整数到A 12 显示A的值 13 跳至B处的内存开始执行 15 如果A的值非零,跳过下一条命令 14 退出程序 其他所有值
看不懂?没关系,这本来就是**专用语言,下一章将用一个例子来讲解,大家就会明白了
我们拿出最初的那个例子程序 jb+/+4-+4--+-++--+/+/++-3+4--+4-+4 da+9+3-+/+4-+/+/+/+-+/+3/+/++-+4 db+9+7-+-+-/-+/+/+/++-+9+前面介绍的时候没有提到数字,其实数字是一种缩写形式+9即代表9个连续的加号,注意,如果加号中间有斜杠或空格,不能用数字来缩写
刚刚忘记说了,重复一下,它的功能是从标准输入读入两个数字,然后在标准输出显示它们的和 下面我们去除缩写形式,大概是下面的样子 jb+/++++-++++--+-++--+/+/++---++++--++++-++++ da++++++++++++-+/++++-+/+/+/+-+/+++/+/++-++++ db++++++++++++++++-+-+-/-+/+/+/++-+++++++++++
从标准输入读入两个数字,然后在标准输出显示它们的和,流程大概是这样的 读入一个数字到A(命令12) 交换A和B的值(命令7) 读入一个数字到A(命令12) A+B,结果存储在A(命令16) 输出A的值(命令13)
然后我们对它进行断句 [attachment=202] 看13楼,这个程序中其实没怎么用到蛋A和蛋B的值,所以接下来我们关心一下jb的运行过程 [attachment=203]
楼上新增了三行 从上到下 第一行是那条命令执行之后jb的值 第二行加星号的是在那里调用了系统函数(未加星号的表示jb的命令号是空命令) 加井号的表示这一行是必定被跳过的(也就是在执行14号命令的时候,蛋A的值必定非0)
其中在第6个命令、第10个命令处发生了读入(其中第8个命令还交换了蛋A和蛋B的值),第14个命令处发生了加法计算,22个命令处进行了输出,24个命令进行了退出 但除了这些预定要执行的命令之外,还有很多其他不必要的命令,比如16处的交换,17和20处的跳过,23处的按位异或。这些就是jb语言的蛋痛所在,为了达到既定的目标,大多都需要执行很多不必要的命令,如何让这些额外的命令不对既定流程造成影响,就是jb的难点所在
ok,教程就到这里
|
|