精华内容
下载资源
问答
  • 词法分析器

    2018-05-09 16:06:37
    设计并实现一个词法分析器,实现对指定位置的类C语言源程序文本文件的读取,并能够对该源程序中的所有单词进行分类,指出其所属类型,实现简单的词法分析操作。
  • 词法分析器-源码

    2021-02-17 03:43:42
    词法分析器
  • 词法分析器中使用怎么样的算法和数据结构是我们的主要研究内容。词法分析器的实现方法手工编码实现法相对复杂,且容易出错当能够对各个部分进行相当好的控制,效率高是目前非常流行的实现方法GCC, LLVM,...词法...

    在词法分析器中使用怎么样的算法和数据结构是我们的主要研究内容。

    词法分析器的实现方法

    • 手工编码实现法
      • 相对复杂,且容易出错
      • 当能够对各个部分进行相当好的控制,效率高
        • 是目前非常流行的实现方法
          • GCC, LLVM,...
    • 词法分析器的生成器
      • 可快速原型、代码量少
      • 但较难控制细节

    如下是手工编码分析常用的转移图:

    2f98999c0f911527f22577a0d7bbd766.png

    其中双圆圈表示接收/识别状态,一个单词的识别已经结束。

    下面给出一个转移图算法的例子:

    token nextToken(){
        c = getChar();
        switch(c){
            case '<': c = getChar();
                      switch(c) {
                          case '=': return LE;
                          case '>': return NE;
                          default: rollback(); return;
                      }
            case '=': return EQ;
            case '>': c = nextChar();
                      switch(c): //similar
        }
    }

    563c67b3b1468e61d3d844c581d5cb4d.png
    token nextToken(){
        c = getChar();
        switch(c){
            // continued from abobe cases...
            case 'a', ..., 'z', 'A', ..., 'Z', '_':
                c = getChar();
                while(c == 'a' ||  c == 'b' || ... || c == '_')
                    c = getChar(); 
        }
    }

    识别关键字

    (以 if 为例),有如下两种方法:

    54b71b396075faa617f5d13c52f2d474.png

    对于 标识符关键字 其实是有很大的交集的:

    • 从语法分析的角度看,关键字是标识符的一部分
    • 以C语言为例:
    • 标识符:以字母或下划线开头,后面跟零个或者多个字母、下划线、或数字。
    • 关键字:if, while, else, ....

    关键字表算法

    • 对给定语言中所有的关键字,构架关键字构成的哈希表H
    • 对所有的标识符和关键字,先统一按标识符的转移图进行识别
    • 识别完成后,进一步查表H看是否是关键字
    • 通过合理的构造哈希表H(完美哈希),可以O(1)时间完成

    原文链接:

    • 编译原理 - 网易云课堂
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,810
精华内容 1,924
关键字:

词法分析器