# fourgame **Repository Path**: lamdba/fourgame ## Basic Information - **Project Name**: fourgame - **Description**: 玩具编程语言,参考brainfuck、forth、postscript - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-12 - **Last Updated**: 2025-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fourgame #### 介绍 forth的玩具方言,定位类似brainfuck。只允许使用16进制数字(4bit)和13个指令(4位加法、 4位减法、 获得高位/和8作按位与、 if、 if-else、 while-do、 call、 over、 swap、 drop、 dump、 load、 ext),其中分支和循环使用方括号包含的代码块。 ![example image](/example.png) #### 软件架构 fg_lex.py做了简单的词法分析,fg.py解释执行,example.py包含了一系列简单运算,实现了256内的整数四则运算。代码有待优化。(当前的8位整数除法展开后多达10万行) 未来可能会支持宏和模块导入。 #### 使用说明 在example.py中使用 tex / "..."测试,或者用Python代码导入fg.py的run函数,或者在命令行中使用python fg.py xxx.fg。 python fg -o xxx.fg可以只输出结果 fourgame使用主栈和副栈, over复制主栈顶部元素, swap交换主栈顶部的两个元素, drop丢弃主栈顶部元素, dump将主栈顶部元素移动到副栈顶部, load将副栈顶部元素移动到主栈顶部, ext设计目的是将副栈作为参数传递给外部调用,现在还没有实现任何操作,但用户可以自行修改fg.py中ext的代码来添加自定义任务。 if 接收前两个元素,作为判断项和执行代码块; if-else接收前3个元素,作为判断项和两个代码块; while-do接收前2个元素,作为循环判断代码块和执行代码块; call执行前面的代码块(代码块可以被栈操作操作,不可做算术操作) test1_mul.fg写了一个乘法函数放在副栈,并调用两次来计算主栈两个数的平方和。 test2_get.fg写了一个列表元素选择器,给定一个数字,可以给出预置列表的该位置所在项(通过删除其他项)。 test3_call.fg利用此机制提供了一个函数调用方案:用元素选择器选择函数,并保持选择器总是位于副栈的第一个位置。案例中,第7个函数是max,第8个是min,它们调用了其他函数。 test4_morecall.fg把目前的标准库放了进来,并手动做了一些内联优化。前几百行都是函数库,主代码只包括最后几行。 #### 目前的问题