Skip to content

CarbonicX/HyperFuck

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HyperFuck 语言

预览:简单的阶乘

# 乘法语句块 从列中取出两个数相乘
Z'{Q_[W~QE_[vE(Q+WEv)?~Q}

# 如果输入的数字是2、1或0 直接输出
# 如果输入小于0 退出
I%T^^=I?]\Tv=IT_[|?(I:\0)I<R?(0)I=R?(R^:\0)

# 阶乘 (I=9 U=I-1用于遍历递减 Y=U-1用于条件判断)
U~IUvY~UYvY(U]\I]\Z/I~?UvYv)

# 输出结果
?:

输入9,输出:

362880

虚拟机

HyperFuck运行在基于Python的虚拟机上。

HyperFuck的虚拟机只包括储存器、8个数据寄存器(qwertyui)和一个结果寄存器(?)用于返回值。

HyperFuck的符号包括10个跳跃符号(asdfzxcbnm)和6个引用符号(ophjkl)。

HyperFuck允许代码内出现空白或换行。注释必须在新的一行,且以 # 开头。

语法

1. 寄存器

HyperFuck中的寄存器只能加1减1自增自减加减其他的寄存器数据

操作一个寄存器,需要先选中,选中的寄存器看作目标寄存器;然后输入操作符,后接0个或多个其他寄存器;最后提到的寄存器看作最后选中的寄存器

字符 说明
q、w、e ... 选中寄存器
^ 加1
v 减1
* 归零
(寄存器)+(寄存器) 加上别的寄存器数据
(寄存器)-(寄存器) 减去别的寄存器数据
(寄存器)~(寄存器) 传送寄存器数据

示例:

q^^w~q^^

这段代码首先选中了q寄存器,加2,此时q寄存器为2;选中w寄存器,将q的数据传送到w,此时q和w都为2;因为q是最后提到的寄存器,因此现在选中的寄存器仍是q,将q加2,此时q为4,w为2。

2. 列与内存

HyperFuck的列不能直接操作,必须移到寄存器中操作。

字符 说明
] 指针加1
[ 指针减1
\ 写入数据
_ 读取数据

执行内存存放HyperFuck的源代码,可以通过指针跳到某处执行。

允许的跳跃字符有:asdfzxcbnm;跳跃字符支持选中机制;字符可以重复,后者会覆盖前者。

字符 说明
(字符)' 记录此处的语句块
(字符)/ 跳到该语句块执行
{} 定义语句块,只有在要求跳跃时执行;不能嵌套
0 退出程序

跳跃指令执行完毕后会自动跳回来

示例

z'{q]\^^?~q_[}
q^^z/q+?

此处的z记录了:将q压入列,将q加2,将q传送到结果寄存器,再弹出列到q。

主程序:将q加2,跳转到z,将q加上返回的结果。最终,q为6。

3. 输入输出

字符 说明
. 输出寄存器的数字对应的ASCII
: 直接输出数字
@ 从键盘读取字符,转换为数字储存到寄存器
% 从键盘读取一个数字
8 清屏

注意:HyperFuck中使用 \n(ASCII为10)的换行符。

4. 逻辑

所有的逻辑运算都将结果保存到结果寄存器

逻辑运算中的二元运算将目标寄存器放在第一位。如 q>w 比较的是q是否大于w。

字符 说明
< 是否小于
> 是否大于
= 是否等于
! 取反
& 与运算
| 或运算

使用 寄存器( ... ) 来循环,循环直到寄存器的值为1。

使用 (寄存器)` 来跳出一个循环,使用 (寄存器); 来跳到循环首。

示例

q^^w^=q
?!i~?
i(e^^iv)

这段代码的意思是:将q增加2,将a增加1。如果q不等于w,就将e增加2。由于 = 运算结果只可能为0或1,取反后仍为0或1,所以如果结果为1,只需要减去1,就能让结果变为0。

其他语言

由于HyperFuck语言的解释器用Python编写,因此只能调用Python函数。

在解释HyperFuck时增加参数 -r (文件名.hi) 可以让HyperFuck引用Python。

.hi 文件的格式形似:

random randint,randascii
foo bar

每一行是一个文件,空格后接要引用的函数名。

函数参数必须为 dict (寄存器数据字典)和 list (列),可直接对其操作。

允许的引用字符有:ophjkl,按顺序排列;引用字符支持选中机制;如果 .hi 文件内的函数超过6个,多余的将被忽略。

命令行工具

1. 交互式

使用 hyperfuck -i 可以进入交互模式。

示例

C:\Users\Administrator>hyperfuck -i
HyperFuck 2.0 交互式解释器 交互式工具
单独输入1来查看寄存器与列使用。
>>> Q^^]\+Q]\

>>> 1
 数据    Q=4   W=0   E=0   R=0
寄存器   T=0   Y=0   U=0   I=0
结果寄存器   ?=0

┌──────┐   ┐   ┐
│      │   │   │
│  列  │ 2 │ 4 │
│      │   │   │
└──────┘   ┘   ┘
>>>

2. 解释器

使用 hyperfuck [options] <主程序> 解释一个程序。

如果要引用Python文件,需要添加 -r <应用索引文件>

示例

C:\Users\Administrator>hyperfuck hello.hf
Hello, world!

C:\Users\Administrator>