西西河

主题:【原创】语言编译器等请教 -- 中国农民

共:💬62 🌺30
分页树展主题 · 全看首页 上页
/ 5
下页 末页
        • 家园 自己定义的一个语言

          文法类似于C,但是没有C那么灵活,不然我的编译器就太复杂了,那不是拿起石头砸自己的脚嘛!但是也没有PASCAL 那么严格,最基本的功能都有了,IF..THEN..ELSE判断语句,WHILE, DO...WHILE, FOR 循环,调用子程序包括了CALL BY REFERENCE和 CALL BY VALUE等等,反正,对于学习编译是足够了。

          其实我自己觉得最有意思的是语义分析部分,最后发现最简单的堆栈就蛮好用的。最简单的,如果没有括号这样的比较复杂一点的优先级的话,比如

          X=A+B;

          根据第一轮的扫描,我们知道有X,=, A,+,B,;这样几个TOKEN, 发现第一个算符,比如=,就先压进算符堆栈,再后面扫描到了加法,先把+号压进堆栈,等到发现B后面没有更高级别的计算了(比如乘除法运算),就弹出这个+算符,然后从另外一个算子堆栈里弹出两个算子A和B,这样就生成了一句类似汇编的中间语言,就像这样

          ADD A,B

          MOV AX,X

          把变量A和B相加,结果在寄存器AX里面,然后把这个值移到变量X里面。

          当然,真正的算法远比这个复杂多了,十多年了,细节记得不是太清楚,不过大概的意思就是这样的。

          • 家园 说来曾想写Text Adventure游戏的

            类似于Zork,里头也要分析语义,老兄的帖子倒是给了我一点启发。

          • 家园 俺也整过这玩意

            公司的任务是做一个c编译器,要跟keil的c完全兼容。做完这玩意后确实觉得计算机在俺面前没有任何神秘性可言了。

          • 家园 那个中间语言在转换成汇编前还需要作语义处理么?还是

            已经close enough,可以直接翻译过去了?

            这是老兄一个人完成的?花了多少时间?

            谢谢:作者意外获得【西西河通宝】一枚

            鲜花已经成功送出。

            此次送花为【有效送花赞扬,涨乐善、声望】

            • 家园 不需要再做语义处理了

              那个中间语言基本上可以一一对应的翻译成汇编了。

              最费时间的是那个语义分析部分,原来准备搞得“学术”一点,算法要漂亮一点,为这花了不少时间。后来发现还是堆栈最简单实用,最后还是用堆栈,这点一定下来,写得就很快了。其他的,都是比较公式化的了。

    • 家园 你是问compiler是用什么写的么?

      原理上什么语言都可以,实际上用C写的比较多些。

      另外Java有点不同,Java源码编译产生后的代码不是“真正”的机器码,要通过虚拟机来执行。这个执行的过程类似于解释语言。

      • 家园

        因为不是学计算机,始终搞不清楚。我知道SAP是用ABAP写的,ABAP的COMPILER也是用C写的吗?C自己的COMPILER呢?

        • 家园 当然,第一个是机器码敲出来的

          我没去翻这段历史,不过最早的C编译器,至少在内核部分是汇编语言。

        • 家园 呵呵,大多数现代C语言的编译器也是C写的

          是不是有点鸡生蛋的味道...

          • 家园 彻底糊涂了

            感觉是自己把自己生下来。能否介绍一下?或者推荐几本书?老农虽然不是学计算机的,却对这个感兴趣。写这个和编程本身比,哪一个更难?

            • 家园 另外

              如果你对写自己的编译器感兴趣,现在已经不需要从最基本的开始自己写了。有现成的编译器生成工具LEX和YACC

            • 家园 这个。。。

              编译原理在计算机系是高年级课程,有些东西还是要有其他课打基础的。直接上手有点难度。

              我上大学用的陈火旺、钱家骅、孙永强的教材,觉得不太适合初学者。国外似乎此类教材也很多,不过没怎么看过,所以也不好评价。

              • 家园 是啊

                老农是学自动化出身,对计算机是二把刀。不过非常想拥有自己的编译器。如何下手?

分页树展主题 · 全看首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河