- 博客(5)
- 收藏
- 关注
D 语言的子集的 Z 编译器
把 D 语言的语法规则改写成 ANTLR 的语法脚本后,大概有30多K,编译的时候,出了很多的错误,最后内存溢出了。想一想,也是,一来我对 ANTLR 还不熟,二来,Digit Mars 上的 D 语言语法介绍,很多左递归,有几个没有定义的过程,两个拼写错误,一个同名不同义的过程等等。在这种情况下,30多K的语法脚本想要很快的就编译通过,是很困难的。 所以,还是决定用 ANTLR 实...
2008-01-18 20:59:17 161
用 ANTLR 做一个四则运算器
开始把 D 的语法转换为 EBNF,发现 D 还支持中文变量名,也就是所谓的 UniversalAlpha,查看了一下 dmd front end 的源代码,检查字符是否 UniversalAlpha 的函数是这样的: int isUniAlpha(unsigned u) { static unsigned short table[][2] = { { 0x00AA, 0x0...
2008-01-15 17:48:08 269
D Parser 之前(三):Z 语言编译器
终于把 Z 语言的编译器做完了。意外的在四则运算上耽误了很多时间,发现 Grammatica 的四则运算的例子其实是右结合的,费了很大劲才解决了。现在觉得 Grammatica 的完整度好像不是很高,比如没有帮助建立抽象语法树的工具之类。也许 ANTLR 会好一点儿吧。 重新整理了目录,把生成的程序放到了 bin 目录下,建立了一个 build.bat 的批处理,用来把 z 编译成机器码,...
2008-01-11 18:32:39 193
D Parser 之前(二):汇编编译器
在《D Parser 之前:写一个简单的虚拟机》里,其中计算 1 到 100 之和的程序 add.bin,是使用十六进制编辑器直接编辑出来的。虚拟机制作完后,考虑了一下,如果直接写 Z 的编译器,难度还是不小,所以决定,先写一个汇编语言的编译器,实现从汇编代码到机器代码的编译工作。 大体来说,汇编编译基本上是一条一条对照生成,不过,行号的需求使得其中多了一些复杂性,另外,我还决定加入注释的...
2008-01-08 00:25:21 172 1
D Parser 之前:写一个简单的虚拟机
最近写了一点儿 D 程序,除了感觉标准库太差之外,没有一个好的 IDE 也是一个很头疼的事,特别是没有智能提示,每次调用一个函数什么的,都要查文档或者直接看源代码,实在是太费劲了。 所以决定自己尝试写一个支持智能提示的 D 的 IDE。因为 SharpDelelop 比较小,而且它对 C# 的支持也做到了智能提示、窗体编辑器等等,所以决定用它作为主框架,除了智能提示,也许还能加入 DFL ...
2008-01-06 17:49:12 127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人