分享我写的语言 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/ 目录。希望与更多同好交流。。。并希望自己的代码对想要写语言的人有所帮助。
5258 次点击
所在节点    iDev
28 条回复
Cofyc
2012-08-29 23:25:05 +08:00
不知道如何贴代码,用 "----" 代替了缩进。
Cofyc
2012-08-29 23:28:48 +08:00
补充:macosx 下开发,还没 port 到 linux
yangg
2012-08-29 23:40:07 +08:00
@Cofyc 一般都是把例子放到gist.github.com里,然后把链接直接入到这里就会解析(貌似要去掉https里的s)
ultragtx
2012-08-29 23:40:14 +08:00
nb
miaoever
2012-08-29 23:43:34 +08:00
也想自己寫門語言,但不知道該從何做起,看過本編譯原理的書,感覺偏理論,實踐上不知道該如何一步一步下手,請樓主指教,多謝。
thedevil7
2012-08-29 23:43:58 +08:00
@Cofyc 用 gist 代码, http://********* 不能用 https.
Cofyc
2012-08-29 23:59:54 +08:00
@thedevil7 下手总是从最开始的入手。

1+2*3 这是一个算式,但也是大多语言的一部分。如果你看过编译原理,里面会提到 lex, yacc 等工具,分别是词法和语法解析生产工具(目前主要使用其后代,re2c,bison等)。而这些工具的手册里就有如何实现一个计算器的范例。可以从这里开始实践并学习。
haiyang416
2012-08-30 00:14:37 +08:00
只为了鼓励下楼主。
udonmai
2012-08-30 00:16:23 +08:00
赞~ 最喜欢能做到自己想做的事的人了!
Cofyc
2012-08-30 00:16:43 +08:00
@thedevil7 最开始 -> 最基础

之后去逐步了解编译器、解析器的组成与运行环节,了解参与其中的数据结构及其实现等等。

我看的编译原理书是"龙"书 (Compilers: Principles, Techniques, and Tools),对这方面讲解的非常好。

最好对照一门开源语言一起看,推荐 Python 和 Lua。这两门语言的语言,是我读起来最容易,也是我个人偏好的代码编写方式。

慢慢地让自己草稿上的符号变成程序中有意义的部分,然后设计语法,让它们动起来。

还有就是,思考语言本身,以及何为语言很重要。
Cofyc
2012-08-30 00:24:23 +08:00
语言的语言 -> 语言的源码

悲剧,ipad 上打了好多错别字,不好意思。。。
Cofyc
2012-08-30 00:30:52 +08:00
@miaoever sry,前面贴子是回复你的,@ 错用户名了
miaoever
2012-08-30 00:32:45 +08:00
@Cofyc 非常感謝 :)
Cofyc
2012-08-30 00:33:30 +08:00
主贴没法修改了,不过只是语法示例,这样缩进看上去也很不错。
DeepBlue
2012-08-30 15:14:32 +08:00
理想和兴趣是最值得赞扬的
Linux诞生的时候世界上也不缺OS么。。
语言设计我是彻底的门外汉,无能评论,但是我有个建议不妨考虑一下。
给语言定一个定位。
像PHP致力于WEB开发,Lua专注于嵌入式,Go的定位貌似是系统开发?
给语言一个明确的定位会给自己一个方向与目标,也能直观的让别人知道这语言能做什么。(当然,如果定位是学习就当我没说……
dn
2012-08-30 18:03:35 +08:00
可能不会去用这个东西,但是还是支持一次。造轮子的过程应该能学到很多东西。
zxy
2012-08-30 18:24:49 +08:00
zxy
2012-08-30 18:26:10 +08:00
囧,勘误,贴错了,不认真的后果
http://gist.github.com/3525706
cabinw
2012-08-30 18:28:44 +08:00
鼓励!
jimbray
2012-08-30 18:36:02 +08:00
NB

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

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

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

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

© 2021 V2EX