(写博客是提醒自己挖了坑一定要填)
github地址https://github.com/lucyTheSlayer/orange
趁着空闲时间,准备学习自己搞一套编程语言出来,就命名为Orange。
Orange的最终目标是python的简化版,具有oop的支持(希望能坚持到这步)
于是翻出好几年前的老书《编译原理及实践》,照着书后源码就是一顿敲。书中的TINY语言格式是在是太丑了,所以必须对其源码进行相应的修改,主要是增加了几个关键词,把REPEAT语句改成了现代感更强的WHILE等。目前Orange的代码样例如下:
apple := 200;
banana := 100;#ohoh123
if(apple<banana){
orange := apple*banana;
banana := 12*apple - 32;
}
i := 10;
while(i>0){
write i;
i := i - 1;
}
这里面的赋值号为:=,这种老式的方式也让人看了很难受,留待以后(真的有以后吗?)再改吧。
目前的进度是能把上述代码转换为字节码,但由于解释器还没搞,所以到底这字节码对不对还不好说。以下是整个编译过程的简记:
1)lexer 词法分析
该模块负责从文件中读取源码,并