Awesome
MakeUp Programming Language
作者 : 张程易 浙江大学 求是科学班(计算机) 1501
本项目是翁恺老师的课程“C程序设计专题”的作业,在MIT协议下开源。
本项目全部使用C语言完成,开发环境是Visual Studio 2015 community edition.
<del>未来将会提供Makefile文件</del> 已经提供 这个项目是完全跨平台的~!!
未完成的操作
由于平台相关:暂不完成。
wait <number>
:等待number个ms
下面是原题目
MakeUp Programming Language
基本数据类型value
数字number,单词word,列表list,布尔bool
- 数字:以[0~9]或'-'开头,不区分整数,浮点数
- 单词:以双引号"开头,不含空格,采用Unicode编码
- 列表:以方括号[]包含,其中的元素以空格分隔;元素可是任意类型;元素类型可不一致
基本操作
基本形式:操作名 参数
操作名是一个不含空格的词,与参数间以空格分隔。参数可以有多个,多个参数间以空格分隔。每个操作所需的参数数量是确定的,所以不需要括号或语句结束符号
基本操作
//
:注释make <word> <value>
: 将value绑定到word上。基本操作的单词不能用做这里的word。绑定后的word称作名字,位于命名空间thing <word>
:返回word所绑定的值: <word>
:与thing相同erase <word>
:清除word所绑定的值isname <word>
:返回word是否是一个名字print <value>
:输出valueread
:返回一个从标准输入读取的数字或单词readlinst
:返回一个从标准输入读取的一行,构成一个列表,行中每个以空格分隔的部分是list的一个元素- 运算符operator
add
,sub
,mul
,div
,mod
:<operator> <number> <number>
eq
,gt
,lt
:<operator> <number|word> <number|word>
and
,or
:<operator> <bool> <bool>
not
:not <bool>
random <number>
:返回[0,number>的一个随机数sqrt <number>
:返回number的平方根isnumber <value>
:返回value是否是数字isword <value>
:返回value是否是单词islist <value>
:返回value是否是列表isbool <value>
:返回value是否是布尔量isempty <word|list>
: 返回word或list是否是空test <value>
:测试value是真是假iftrue <list>
:如果之前最后一次test是真,则执行listiffalse <list>
:如果之前最后一次test是假,则执行listword <word> <word|number|bool>
:将两个word合并为一个word,第二个值可以是word、number或boollist <list1> <list2>
:将list1和list2合并成一个列表,两个列表的元素并列,list1的在list2的前面join <list> <value>
:将value作为list的最后一个元素加入到list中(如果value是列表,则整个value成为列表的最后一个元素)first <word|list>
:返回word的第一个字符,或list的第一个元素last <word|list>
:返回word的最后一个字符,list的最后一个元素butfirst <word|list>
:返回除第一个元素外剩下的列表,或除第一个字符外剩下的单词butlast <word|list>
:返回除最后一个元素外剩下的列表,或除最后一个字符外剩下的单词item <number> <word|list>
:返回word或列表中的第number项字符或元素repeat <number> <list>
:运行list中的代码number次stop
:停止当前代码的执行。当前代码可能是run、repeat、if或函数中的代码wait <number>
:等待number个mssave <word>
:保存当前命名空间在word文件中load <word>
:从word文件中装载内容,加入当前命名空间erall
:清除当前命名空间的全部内容poall
:列出当前命名空间的全部名字
函数定义和调用
定义
make <word> [<list1> <list2>]
word为函数名
list1为参数列表
list2为操作列表
调用
<functionName> <arglist>
<functionName>为make中定义的函数名,不需要双引号"
<arglist>是参数列表,<arglist>中的值和函数定义时的<list1>中名字进行一一对应绑定
函数相关的操作
output <value>
:设定value为返回给调用者的值,但是不停止执行stop
:停止执行local <word>
:设定该word为本地名字。参数也是本地名字
既有名字
系统提供了一些常用的量,或可以由其他操作实现但是常用的操作,作为固有的名字。这些名字是可以被删除(erase)的。
pi
:3.14159if <bool> <list1> <list2>
:如果bool为真,则执行list1,否则执行list2。list均可以为空表run <list>
:运行list中的代码
LICENSE
THIS PROJECT IS OPEN SOURCE UNDER MIT LICENSE, BUT WITH A LIMITATION
WITH THE "HONEST RULE" REQUIRED BY Prof. Chen Yue, Zhejiang University
ANYONE CANNOT USE ANY PART IN THIS PROJECT IN "Advance C Programming" COURSE IN ZJU.
根据浙江大学学术诚信守则。
任何人不可以使用本项目中的任何一部分代码作为“C程序设计专题”的大程序的组成部分。
违反本条例的任何后果, 本人不承担任何责任。