开发自己的编程语言(四)
2014-01-10 17:08
176 查看
Snail Language经过一段时间的完善,目前的0.143版本已经具备了简单编程语言应有的功能。Snail Language的最终目标:成为一款.NET语言,即它的中间语言为CIL。
下面用代码片段讲解语言的功能,==>为输出结果。
操作符
目前只正确支持:+, -, *, /, %, +=, -=, *=, /=, %= , =, ==, >= , <=, !=
其他操作符也支持,但是它们的优先级没有完成,使用时务必外加括号。
四种类型:
对字符串的操作:
==>
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)作用域的查询目前采用的是最接近原则,就是从最近的作用域开始查找,一直到最外层全局变量。这规则和大多数语言都不大一致,以后考虑修改。
数组实现
==> 2
函数调用
空函数都返回0:
斐波那契(递归):
返回数组:
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。
下面用代码片段讲解语言的功能,==>为输出结果。
操作符
目前只正确支持:+, -, *, /, %, +=, -=, *=, /=, %= , =, ==, >= , <=, !=
其他操作符也支持,但是它们的优先级没有完成,使用时务必外加括号。
四种类型:
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。
相关文章推荐
- 开发自己的编程语言(八)—— 在Snail中调用C#函数
- 高效开发伟大且成功产品, 最重要的一步: 开发人员找到与自己匹配的编程语言
- 开发自己的编程语言(六)—— First-Class Value
- 开发自己的编程语言(五)—— CIL中间代码的生成
- 开发自己的编程语言(一)
- 开发自己的编程语言(七)—— 字典数(相关联数组)
- 开发自己的编程语言(二)
- 开发自己的编程语言(三)
- 开发自己的编程语言(九)—— 生成EXE文件
- C#基础系列:开发自己的窗体设计器(实现控件的选择)
- 自己动手搭建React开发环境之三Webpack
- 上接[翻译]开发一个自己的HTML在线编辑器(一)
- Java Web开发之一:用好的技术设计来犒赏自己
- 自己动手开发jQuery插件
- 【持续更新】.Net 开发中给自己埋下的坑!
- 自己动手开发智能聊天机器人完全指南(附python完整源码)
- (转)软件开发人员如何提高自己的软件专业技术方面的具体建议
- 开发“todolist“”项目及其自己的感悟
- Android开发之自己定义TabHost文字及背景(源码分享)
- 自己动手开发网络服务器