zoukankan      html  css  js  c++  java
  • 编译原理(龙书)-编译器制作

      初步给出基本过程及遇到的问题和最终源代码:

      

    步骤一:写词法分析器lexer下的各个类,在写Lexer.java类的时候需要去写Type.java中基本数据类型,然后转到Lexer类中
            Tag:词法单元的常量
            Word:保留字,标识符合像&&这样的词素,单目减号......
            Real,Num:继承于Token,分别处理浮点数和整数
            (Num,Word类当new时保留字,Word保留标识符,当new的时候,都会将字赋值给Token,然后就是Word会将Tag中的字保留下来)
            Token:词法分析
            Lexer:判断输入的各个字符、数字、关键字、回车等并保存,消除空格多余字符。
    步骤二:写符号表:Array(数组),类型转化(Type), Env(这里会用到inter里面的id)
    
    步骤三:表达式中间代码:由上述衍生的id(标识符)和Node的Expr子类Op(衍生出Arith,Unary,reduce子类,Op里面会用到Temp类)
         
    步骤四:布尔表达式的跳转代码(Constant中的jumping,类Logical为Or,And,Not类提供一些功能, Rel实现运算符(>,<等的跳转), 同时还有Access的跳转)
    
    步骤五:语句中间代码:stmt下面衍生出的(if, while, dowhile, else, break),和赋值语句(set, setElem,以及seq)
    
    步骤六:语法分析器(Parser即可)

    实现效果:

           1. 很多时候容易报错,因为需要用到其他未写的类,会转到其他类中写,但是只要基本底层类写好,其余都只用写一点。

           2. eclipse本身自带的问题,inter包中有些类可能对显示错误,只需要删除一个空格然后恢复保存即可,具体原因未明。

      3.由于采用getch读入,所以最后需要输入一个字符来退出

           4.词法分析部分:有些类给出并不完整,需要与前面书本讲解对照看,理解会更加深刻

    源代码:

          链接: https://pan.baidu.com/s/1AkqWhRqLxyb443qyzSxp0w 提取码: 4it6

  • 相关阅读:
    浅入浅出EmguCv(一)OpenCv与EmguCv
    Selenium2入门(三)WebDriver API之Get
    Selenium2入门(二)WebDriver
    Selenium2入门(一)简介
    Tomcat部署Solr4.10.4
    On the Optimal Approach of Survivable Virtual Network Embedding in Virtualized SDN
    几篇虚拟映射文章粗读
    SDN网络虚拟化中有效协调的映射算法
    SDN网络中hypervisor带来的控制器时延(Hypervisor位置的优化)
    FlowerVisor理解
  • 原文地址:https://www.cnblogs.com/meditation5201314/p/10223576.html
Copyright © 2011-2022 走看看