
**********************************************
2009年7月（大二下半年）

    大一时候，一直用 8051IDE 写51芯片程序，用汇编不会C语言。
花半年时间做一个游戏机，在淘宝上买到12864的液晶屏，慢慢地程序写到超过64KB了，
导致在 8051IDE 中打不开这个程序文件了。原来是 8051IDE 的一个BUG

    然后琢磨琢磨，发现了一个很创意的方法：
先新建一个空白的文本文件 a.txt，用 8051IDE 打开这个文件，然后把 8051IDE 最小化，再用记事本重新
打开 a.txt，把超过64K的汇编程序复制粘贴到记事本中，保存。然后再把 8051IDE 最大化，单击编译按钮，
成功生成hex文件了~  这样每次都是在记事本中写程序保存，然后转到 8051IDE 去编译，一直将就着；

    大二想学C语言，搜索到Keil软件，网上找了一个小程序试验下，总结出如下感悟：

1 文字带有颜色，字符串、数字、关键字等都有不同的颜色。发现以前用记事本写程序太难受了
2 C语言带有缩进，非常好，不像汇编顶格写，很乱。
3 C语言中变量起名都是小写，而以前写汇编程序全用大写字母，而且是缩写形式，程序写多了很乱；
4 写了一万行的汇编程序，一段注释都没有，变量全部大写，全部顶格没有缩进，现在一句都看不懂了。
5 Keil有2K限制，一直以为软件都是免费用的，因为那个8051IDE在网上一搜就有好多下载点的，免费用；
  而在Keil代码多一点就不给编译了。

**********************************************
2009年7月

    大二下半年学习凌阳的SPCE061A芯片，用C语言写一些液晶屏图形驱动。计划要自己写一个编译器，
一定要实现如下的特性：

1  绝对不用工程的形式，在Keil中需要新建一个工程然后添加C文件。不要这样，应该像8051IDE一样，
在一个记事本中写程序然后就可以直接编译了，并且只生成一个hex文件，不要像Keil产生一大堆的obj、lst文件，乱~

2  把C语言的类型改一下，彻底区分有符号数和无符号数，隐式转换只能沿着有符号数或无符号数进行，不可以混合；

3  。。。。。。其他一些细节改改；

    最好是写编译器的语言和编译器的目标语言是同一个语系的
认识了计算机系提高班的一个大四学长柳波，他饭卡的线圈断了，找我帮他焊上，然后去他们提高班玩了会，
从他那弄了一个软件 SharpDevelop，这是写C#的，可以像VB一样拖出窗体和按钮等，而且C#语法和C语言类似，
用类C语言写一个C语言编译器~  这样比较好。去图书馆借一本C#的书开始慢慢学

**********************************************
2009年7月

    放暑假不回家了，在学校实验室准备写编译器。先写几个小程序熟悉C#的语法，然后正式开始。

**********************************************
2009年7月18日

    用SharpDevelop写了一个汇编程序着色软件，采用下面的方式在一个txt文件中保存
需要着色的字符串，当用户打开一个汇编程序后调用着色程序把程序中的关键字显示成带有颜色的，
可以着色大写和小写的汇编程序关键字；

mov</OK>
MOV</OK>
add</OK>
ADD</OK>
org</OK>
ORG</OK>
end</OK>
END</OK>
equ</OK>
EQU</OK>
...
</END>

**********************************************
2009年7月

    从Keil中找到三个文件：ax51.exe，lx51.exe，hx51.exe；
其中ax51是把一个汇编文件编译成obj文件；lx51是把obj文件编译为bin文件，最后用hx51把bin文件转成hex文件；
上网搜索如何用C#调用这三个软件，把用户的汇编程序生成HEX文件；
完成后和原先那个着色程序合并到一起，就是一个小型的汇编开发环境了；
发现一件事：在Keil编译C文件时有2K限制，而用Keil的汇编器ax51编译汇编文件时没有限制，因此可以
推断Keil的2K限制是在C编译的过程中加入的。

**********************************************
2009年7月

    开始设计C语言的编译器。方法：写一段程序把用户输入的C代码中的制表符替换成空格，
再重新扫描源程序，凡是遇到多个连续的空格就替换成单独一个空格；然后把源程序按照回车符
分割成一个字符串数组，每个字符串（每一行）再用空格字符分割成另一个小数组，这样每个
小数组的元素就是C程序的一个基本词了。用C#的 string.split 函数分割。
剩下的就是识别 if while 控制语句了：寻找源程序中的所有大括号“{”，再找到和这个大括号匹配的另一半“}”，
它们之间的就认为是一个控制语句。

**********************************************
2009年8月

    初步做好了一个编译器，可以编译小的C程序了。
不支持结构体，指针也是很勉强实现的，不过总算能编译小程序了



