1 Star 0 Fork 3

中华田园人/JunkLang

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
README.txt 3.54 KB
一键复制 编辑 原始数据 按行查看 历史
许兴逸 提交于 2017-03-06 11:47 . CSharpCodeGen
JunkLang
1.字面值:
1.1 字节
数字使用罗马数字表示,可接受字符有:
O 0
I 1
V 5
X 10
L 50
C 100
表示范围 O ~ CCLV
任何超出范围的字面值均为非法字面值。
对于任何超出字面值的操作,需要拆分为两步或更多步进行才可以正常。
2.符号、标识符、注释和关键字
2.1 标识符
怎么可能会有标识符这种东西(
2.2 操作符
; 赋值
# 复制当前指针指向的值到它的下一个变量(不改变指针)
- 加法
+ 减法
/ 乘法
& 乘方
_ 开方
% 除法
* 求余
~ 取反
] 指针加
[ 指针减
0 指针设置到0
! 如果指针指向值为0则跳转到代码标签
| 无条件跳转到代码标签
? 定义代码标签
, 注释
^ 增加分配内存
v 减少内存分配
< 输出当前指针指向的字节
> 从控制台读取一行数字
( 按照数字输出当前字节
) 从控制台读取一个字节
3.运行时
3.1 运行时构成:
0字节变量空间(可以重分配,需要手动初始化)
一个长度为32bits指针,指向当前操作中的指针。
3.2 内存分配增加与减少
^字节值
将会增加内存分配。
假设现在有2字节长度的内存,执行以下代码后:
,,,,,,,,,,,,,,,,,,,代码开始
^CCLV ,将变量空间增加255长度
^XVI ,将变量空间增加16字节长度
,,,,,,,,,,,,,,,,,,,代码结束
此时内存空间长度为273字节。
v 可以减少内存长度
假设现在已有273字节长度
,,,,,,,,,,,,,,,,,代码开始
vCCLV ,减少255字节内存
vIIXX ,减少2字节内存
,,,,,,,,,,,,,,,,,代码结束
此时变量空间长度为0.
4.变量的访问
假设在一片长度为255的内存空间上,访问第16个字节,将其赋值为17
指针当前位置为0
则书写以下代码:
,,,,,,,,,,,代码开始
]XVI ,移动到第16字节
;XVII ,赋值为17
,,,,,,,,,,,代码结束
如果指针超出内存范围则后果是未定义的。
5.数学运算
对于数学运算-+/%*;&_均是在当前指针指向的对象上运行。
如:
-V
相当于C语言的(i为当前指针指向的变量):
i += 5
特殊运算~
~语法会把任何非0值变为0
会把0值变为1
如果值出现了溢出,则其后果是未定义的。
6.代码标签和跳转
我们可以使用下列方法制作一个死循环:
,,,,,,,,,代码开始
?V ,定义代码标签,这个标签的编号是5
|V ,无条件跳转到5号标签
,,,,,,,,,代码结束
标签编号必须是一个字节值。
每个标签编号仅可使用一次。
条件跳转:
!语法和|相同,不同之处在于!语法只在当前指针值为0时执行。
7.输入和输出
使用>语法进行输入,输入值被保存到当前指针指向的地址。
使用<语法进行输出,输出的值被保存到指针指向的地址。
8.HelloWorld例子
,分配内存
^XI ,十一字节
,初始化指针
0
,赋值出HelloWorld字符串的ASCII码
;LII ,H = 72(ASCII)
]I ,右移指针
;CI ,e
]I
;CVIII ,l
]I
;CVIII ,l
]I
;CXI ,o
]I
;LXXXVII ,W
]I
;CXI ,o
]I
;CXIV ,r
]I
;CVIII ,l
]I
;C ,d
]I
;O ,结尾
,将指针置0,然后向右遍历输出字符串
0
?O
<
!O
vXI ,释放内存
9.粗略估算圆的面积和周长
,分配2字节的内存
^II
,指针置0
0
,输入到当前指针
>
,把这个值复制给另一个变量
#
,把指针移动到第二个变量,并且对其进行计算得到周长
]I
/II ,乘以2
/III ,乘以3(粗略的圆周率)
< ,输出周长
,把指针移动到第一个变量,并且把第二个变量复制给第一个变量
[I
#
]I
&II ,二次方
/II ,乘以3(粗略的圆周率)
<
,释放内存
vII
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/Chinese_pastoral_person/JunkLang.git
git@gitee.com:Chinese_pastoral_person/JunkLang.git
Chinese_pastoral_person
JunkLang
JunkLang
master

搜索帮助