编译原理 编译器的实现(C语言实现)

 编译原理 编译器的实现(C语言实现)

chap1  词法语法语义的实现

绪论
   根据输入Context-free Grammar(上下文无关法)构建分析器,
实现类似于yacc,lex的功能。
   例如输入:
      S'->S
      S->BB
      B->bB|a
   下面说明,可选择阅读,是构建分析器的主线。
   首先构建词法分析器,识别文法,然后把文法储存在文法表中,
然后利用Canonical LR(规范LR)算法,构建项目集,用现有的项目集
构建分析表。前端分析完成。

   读者最好知道语法分析,词法分析,语义分析。理论的东西
请参考龙书<<编译原理>>,实践的也可参考虎书
<<现代编译原理 -C语言实现>>
电子版,可在http:://ebook.00083.com
       http://www.netyi.net下载,搜索一下就有。推荐
龙书,有详尽的叙述,虽然有很多pascal代码。
还有一本<<现代编译程序设计>>(Modern complier design)
偏重实践,只不过内容有点凌乱。龙书虎书有很多很好的习题,
只是没有答案,有点遗憾,现代编译程序设计,有答案,只不过
很难读进去。
  国内的教材,清华编译原理的偏重理论,并且一些理论还不健全,
缺乏实践。国防科大的陈火旺<<现代编译原理>>,惨不忍睹,读完
以首抢地,血流如注,不知所云。科大陈意云,完全抄袭龙书,
稍微改了一些示例程序的代码中的符号,并且翻译的很差,很重要的
必须理解的东西一笔带过,适合读完龙书,然后利用这本书来温习。
别的教材不甚了了。


  小弟主修空间物理,毕业后在家卧床养病两年,前途无望,无所事事,
 每日坐在樟树下,数数蚂蚁而已。有空写点编译原理的东西,如果有
 高洁之士,请不吝指教。zh291@mail.ustc.edu.cn


       
$1  词法分析

    词法分析,有两种实现方法,一个是利用正规表达式构建DFA,
再根据DFA实现程序,一个是预测分析,利用输入符号,用一系列
的case和if判断语句,来构建函数。手工第二种方法较多,第一种
方法多用于词法分析工具构造如lex;
     
    本文构建一个yacc类似程序的读取文法表达式的词法分析器。
 读取合法的context-free文法。
    下篇根据这个程序构建语法分析;
     
     词法分析,可以从控制台输入中一个一个读取,调用getchar()
读取一个word,然后分析这个读取的word,也可以一次性读取所有输入,
例如控制台输入,文件输入,然后将读取的date存储在一个全局数组中。
     例如:这是一个简单函数,没有优化的。
        char buffer[1024];
        void read()
    {
    FILE *f;
    int index=0;
    char c;
    f=fopen("date.dat");
    while((c=fread(f))!=EOF)buffer[index++]=c;
    }

     词法分析首先读入字符。首先构建读入date函数。
    本文的词法分析,采用读取控制台输入,每次读入一个字符,如果字符
是backspace,tab(' ','/t'),则忽略。因为是空
  • 0
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值