分享我写的语言 cobj

2012-08-29 23:19:53 +08:00
 Cofyc
https://github.com/Cofyc/cobj

名字叫 cobj, C Object 的缩写。

一两年前,一本编译原理,一堆 checkout 出来的源码,从零开始,纯粹只是为了实现”自己的”语言,开始了这个业余项目。

虽然是还是一个 toy language,但如今有了点雏形,感觉迈出了第一步,鼓起勇气放到网上,希望与更多语言爱好者交流。。。

很多代码与技术是基于或者借自其他开源语言,其中核心的对象模型与 GC 是 Python 的翻版,但词法、语法分析器,语法树,VM,以及一些辅助设施均自己实现,当然技术均来自书籍以及各种开源语言,包括并不限于以下:Python, PHP, Ruby, Lua, Go。这方面目前不敢说有任何独到之处。

以下是例子:(目前很雏形,对象,模块,第三方 API 均还没有)

// print primes
maxnum = 10
i = 2
func is_prime(n)
----local j = 2
----while j * j < n + 1
--------if n % j == 0
------------return False
--------end
--------j += 1
----end
----return True
end

while i <= maxnum
----if is_prime(i)
--------print(i)
----end
----i += 1
end

// closure
# Borrowed from Programming Lua, 2nd edition, section 16.5
func newObject(value)
----return func (action, v)
--------if action == "get" do return value
--------elif action == "set" do value = v
--------end
----end
end
d = newObject(0)
print(d("get", None))
d("set", 10)
print(d("get", None))


更多例子可以看代码的 examples/ 目录。希望与更多同好交流。。。并希望自己的代码对想要写语言的人有所帮助。
5434 次点击
所在节点    iDev
28 条回复
Js
2012-08-30 18:54:34 +08:00
赞, 话说那两例子除了True和None,整体好有lua的赶脚
Cofyc
2012-08-30 19:11:54 +08:00
@DeepBlue 目标是写一门通用目的的 DSL 语言。不过,还在往巨人的肩膀上爬。。。以后会怎样不好说。
Hualin
2012-08-30 19:17:49 +08:00
好赞 v2ex 上也有这样另类的GEEK
Cofyc
2012-08-30 19:22:09 +08:00
@DeepBlue 关于定位,一直在思考,只是能定什么位与能做出什么直接有关,等能站在前人的肩膀上,才能确定吧。虽然目标确定,但主要以学习为主。感谢建议 ;-)
Cofyc
2012-08-30 19:30:15 +08:00
关于语法,Lua/Python/Ruby 是我直接的借鉴。

三者语法都是极简。我在设计语法时,也是不允许一点冗余。
一些地方比它们还要简单,比如合用 then/do。当然目前语言还很小。
iminto
2012-08-31 09:54:25 +08:00
跟lua 比较接近
adow
2012-08-31 10:20:37 +08:00
LZ NB 啊
lemonleo
2012-12-10 22:05:05 +08:00
顶楼主,很GEEK

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/46455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX