您的位置:首页 > 编程语言

开发自己的编程语言(四)

2014-01-10 17:08 176 查看
Snail Language经过一段时间的完善,目前的0.143版本已经具备了简单编程语言应有的功能。Snail Language的最终目标:成为一款.NET语言,即它的中间语言为CIL。

下面用代码片段讲解语言的功能,==>为输出结果。

操作符

目前只正确支持:+, -, *, /, %, +=, -=, *=, /=, %= , =, ==, >= , <=, != 

其他操作符也支持,但是它们的优先级没有完成,使用时务必外加括号。

四种类型

year = 2014
name = "Snail Language"
ver = 0.143
detail = ["Snail Language", 0.143, ["HAZ", 2014], ["SH", "China"],"QQ329779095"]
print(year.Type(), " ", name.Type(), " ", ver.Type(), " ", detail.Type())
==> integer string double array

对字符串的操作:
str = " snail" + "language " //字符串相加
str = (str * 2).Trim().ToUpper() //字符串首尾去空,并转成大写字母。
print(str,"\n")

str = str.ToLower()
print(str,"\n")

str = str.Reverse() //字符串翻转
print(str,"\n")
//遍历字符串
loop i=str.Length()-1 to 0, -1
{
print(str[i], " ")
}

==>

SNAILLANGUAGE  SNAILLANGUAGE

snaillanguage  snaillanguage

egaugnallians  egaugnallians

s n a i l l a n g u a g e     s n a i l l a n g u a g e 

作用域

1)所有的大括号{ .. }都是一个作用域,如函数、循环体等等。

2)只有以local为前缀的声明才是局部变量,其他都是全局变量。

3)作用域的查询目前采用的是最接近原则,就是从最近的作用域开始查找,一直到最外层全局变量。这规则和大多数语言都不大一致,以后考虑修改。

数组实现

a = [1, 2, [1, 2, 3]] //动态类型数组,嵌套函数
b = []
b[0] = []             //b[0]是一个数组
b[0][0] = a[2][2]     //数组赋值
print(b[0][0])

==> 2

a = []
loop i = 0 to 100 { a[i] = [] } //二维数组
a[1][2] = 100   //因为数组时线性数组,对a[1][2]赋值的时候,a[1][1],a[1][0]等被设成了默认值0
a[1][2] += 1
print(a[1][2])
==> 101

函数调用

空函数都返回0:

func test1(){}
func test2(){return 0}
func test3(){return}
print(test1(), test2(), test3())
==> 000

斐波那契(递归):

func fibo(n)
{
if (n < 1)return 1;
return fibo(n-1) + fibo(n-2)
}
print(fibo(15))
==> 1597

返回数组:

func test()
{
return [1, 2, 3, 4]
}
a = test()
print(a[1])
==> 2

IDE调试

支持单步调试和执行到断点,已经具备了debug的原型,但没有完善,bug很多。

1)鼠标单击IDE左侧添加断点,F6执行到断点。

2)F10单步执行。

版本计划

版本0.15计划实现对文本文件的操作。

版本0.16计划将线性数组变成相关联数组。

版本0.5计划开源。

执行文件下载

http://download.csdn.net/detail/u012813593/6834501

反馈

本软件为个人作品,如何建议和Bug,请联系:329779095@qq.com。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: