鱼C论坛

 找回密码
 立即注册
查看: 2526|回复: 2

[吹水] 【编程语言中的精品——草泥马语】它的出现弥补了我戈壁在国际编程语言界中的一项!!

[复制链接]
发表于 2014-7-16 20:08:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
草泥马语是马勒戈壁第一款拥有自主知识产权的,以马勒戈壁上顽强生存的草泥马们为主体的编程语言。草泥马语语法生动丰富,内容健康活泼,是一门老少皆宜,人人适用的编程语言。它的出现弥补了我戈壁在国际编程语言界中的一项空白。

                               
登录/注册后可看大图

草泥马语是用了先进的JOT(Just Out of Time)编译引擎,并且运行于爪哇虚拟机中,运行速度大幅度降低同时,还使用了戈壁内外各种先进技术,使的草泥马语不十分可靠。
《草泥马语》是一个基于堆和栈的编程语言,该语言的最大特点在于:所有操作全由“草”“泥”“马”“河蟹”这4个命令完成,文件内的其他字符都作为注释而不参与程序执行。
另外,由于草泥马语言形式过于震撼,所以为了调试,编写了草泥马语逆编译器:gmhd 可以吧草泥马语言代码反编译成比较好懂的伪代码。


《草泥马语》的语言规范草泥马语是一款根据国外同类型语言“Whitespace”改编(替换关键字)而成的全新的编程语言,执行时使用“草泥马”的不同组合实现不同功能。
PS: 可以先看Whitespace语言入门,然后吧其中的[Space]替换成草;[Tab]替换成泥;[LF]替换成马就可以了解草泥马语的大致用法了。
每个指令都有3部分组成,包括指令头,指令和可选的操作数
指令头草泥马语的指令头说明了指令的类型,列表如下:
指令头说明鸟语说明
[草]栈操作Stack Manipulation
[泥][草]数学运算Arithmetic
[泥][泥]堆操作Heap access
[马]流程控制Flow Control
[泥][马]输入输出I/O栈操作指令 [指令头:草] 栈用来存储指令调用的参数和结果,元素仅限整数,栈高度不限。
指令操作数说明鸟语说明
[草]Number把某个数压栈Push the number onto the stack
[马][草]-复制栈顶元素Duplicate the top item on the stack
[泥][草]Number复制第n个元素到栈顶Copy the nth item on the stack (given by the argument) onto the top of the stack
[马][泥]-交换栈顶两个元素的位置Swap the top two items on the stack
[马][马]-销毁栈顶元素Discard the top item on the stack
[泥][马]Number销毁栈顶的n个元素,但保持栈顶Slide n items off the stack, keeping the top item数学运算指令 [指令头:泥草] 注意,草泥马语没有浮点运算,但是整数运算的精度是无限的。 操作规则:操作时先弹出一个栈元素为运算的右值,再弹出一个为左值,计算后将结果压栈。
指令操作数说明鸟语说明
[草][草]-加Addition
[草][泥]-减Subtraction
[草][马]-乘Multiplication
[泥][草]-除Integer Division
[泥][泥]-取模Modulo堆操作 [指令头:泥泥] 与栈一样,堆也只能存储整数,草泥马虚拟机(AlpacaVM)最多支持65536个堆元素(0-65535),但是堆元素的大小不限制。
堆操作的规则:如果要存储,要先将要操作的堆地址压栈,再把要存储的数压栈,操作时弹出栈顶两元素,将栈顶元素存储到次栈顶指示的堆空间中;如果要取出,要先将地址压栈,操作时弹出栈顶元素,根据其指示的地址取出堆中元素压栈。
指令操作数说明鸟语说明
[草]-存储栈顶元素x到堆地址为y的空间中,y是次栈顶元素Store
[泥]-先把y压栈,然后获取堆中地址为y空间的元素到栈顶Retrieve流程控制 [指令头:马] 标记一个程序点可以用来进行跳转或者函数调用,标记是一个任意长度的无符号整数,每个草泥马文件中,标记应该是唯一的,并且所有调用的标记应当存在。
注意:河蟹这个指令仅仅在河蟹这两个字连在一起时有效,分开是没有效果的。(注意更正一个歧义表达,河蟹这个指令是没有指令头的。)
指令操作数说明鸟语说明
[草][草]Label定义一个标记Mark a location in the program
[草][泥]Label调用标记指示的函数Call a subroutine
[草][马]Label无条件跳转到标记处Jump unconditionally to a label
[泥][草]Label如果栈顶元素等于0则跳转到标记指示处Jump to a label if the top of the stack is zero
[泥][泥]Label如果栈顶元素小于0则跳转到标记指示处Jump to a label if the top of the stack is negative
[泥][马]-函数结束,返回调用处End a subroutine and transfer control back to the caller
[马][马]或者[河蟹]-无条件结束程序运行End the programIO控制 [指令头:泥马] 指令操作数说明鸟语说明
[草][草]-弹出栈顶数字作为字符输出到标准输出Output the character at the top of the stack
[草][泥]-弹出栈顶数字以数字形式输出到标准输出Output the number at the top of the stack
[泥][草]-从标准输入内读取一个字符(回车结束)并且放到栈顶(弹出)所对应的堆空间Read a character and place it in the location given by the top of the stack
[泥][泥]-从标准输入内读取一个数字并且放到栈顶(弹出)所对应的堆空间Read a number and place it in the location given by the top of the stack如何定义操作数操作数的定义是二进制的整数,对于流程控制指令来说是无符号的,否则是有符号的,第一位为符号位。 定义方法是:草为0;泥为1;马代表定义结束。对于符号位,草为正,泥为负。
举个例子吧这是个例子,输出1到10十个数,具体解释请看下面。
草草草泥马 马草草草泥草草草草泥泥马 草马草 泥马草泥 草草草泥草泥草马 泥马草草 草草草泥马 泥草草草 草马草 草草草泥草泥泥马 泥草草泥 马泥草草泥草草草泥草泥马 马草马草泥草草草草泥泥马 马草草草泥草草草泥草泥马 草马马 马马马写出来大概就是这个样子,下面是一个从1到10的循环:
指令操作数说明
草-草 草泥马数字1压栈Put a 1 on the stack
马-草草 草泥草草草草泥泥马在这里设置一个循环开始的标识Set a Label at this point
草-马草复制栈顶元素Duplicate the top stack item
泥马-草泥输出当前值Output the current value
草草 草泥草泥草马换行(10)压栈Put 10 (newline) on the stack...
泥马-草草输出...and output the newline
草草 草泥马1压栈Put a 1 on the stack
泥草-草草相加栈内两个元素Addition. This increments our current value.
草-马草复制栈顶以便比较Duplicate that value so we can test it
草-草 草泥草泥泥马11压栈Push 11 onto the stack
泥草-草泥相减,如果我们已经循环到11了应该会得到一个0到栈顶Subtraction. So if we've reached the end, we have a zero on the stack.
马-泥草 草泥草草草泥草泥马如果是0,跳到最后If we have a zero, jump to the end
马-草马 草泥草草草草泥泥马跳到开始Jump to the start
马-草草 草泥草草草泥草泥马设置一个标签标识循环结束Set the end label
草-马马清空堆栈,打扫卫生,整理整顿Discard our accumulator, to be tidy
河蟹
正如其言Just as it says.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 20:20:01 | 显示全部楼层
这个真是要叼炸天的感觉。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-16 22:27:52 | 显示全部楼层
介个........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 07:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表