编译原理 [0x02][0x01]==(3.2) 词法分析__正规表达式及确定有限自动机

词法分析

回看第一章的总框,此章为介绍词法分析器

在进行词法分析之前,源程序仅仅是一串字符序列


词法分析的任务

  • 从左至右逐个字符地对源程序进行扫描,产生一个个单词符号

词法分析器(Lexical Analyzer)

  • 扫描器(Scanner)
  • 执行词法分析的程序

词法分析器的功能

功能

  • 输入源程序、输出单词符号

单词符号的种类有以下几类

  • 基本字:如 beginrepeatfor,...
  • 标识符:用来表示各种名字,如变量名、数组名和过程名
  • 常数:各种类型的常数
  • 运算符+-,*,/,...
  • 界符:逗号、分号、括号和空白

词法分析器输出

   作为编译程序的一个模块,词法分析器与其他模块之间有接口和交互行为,词法分析器识别出的单词会交给语法分析器,单词识别出的结果的输出形式一般是一个二元组形式,包括单词的种类和单词的本身的值

输出的单词符号的表示形式

  • (单词种别单词自身的值)   

  • 单词种别通常用整数编码表示
  • 若一个种别只有一个单词符号,则种别编码就代表该单词符号。假定基本字运算符界符都是一符一种。
  • 若一个种别有多个单词符号,则对于每个单词符号,给出种别编码自身的值
  • 标识符单列一种;标识符自身的值表示成按机器字节划分的内部码
  • 常数按类型分种;常数的值则表示成标准的二进制形式

    eg C程序

         while (i>=j) i--;
        输出单词符号
        < while,  - >
        < (,  - >
        < id,  指向i的符号表项的指针 >
        < >=,  - >
        < id,  指向j的符号表项的指针 >
        < ),  - >
        < id,  指向i的符号表项的指针 >
        < --,  - >
        < ;,  - >

词法分析器在编译器中地位

如图所示,源程序首先输入到词法分析器,按照词法规则取出一个单词,将该单词输入到语法分析器,语法分析器得到单词并进行下一步处理,当语法分析完毕后,取出下一个单词,此时语法分析和词法分析都会和符号表交互


词法分析器的结构 


扫描缓冲区

发布了43 篇原创文章 · 获赞 7 · 访问量 3351

猜你喜欢

转载自blog.csdn.net/Zeroooooo/article/details/100745433