【北航编译原理笔记】2. 词法分析

词法分析

功能:
根据词法规则识别及组合单词,进行词法检查
对数字常数完成 数字字符串 -->二进制数值 转换
删去空格字符和注释

单词种类: 保留字, 标识符, 常数, 分界符
单词内部形式: 单词类别 + 单词值
单词类别: 按单词种类分类: 标识符, 无符号常数(整), 无符号浮点数, 布尔常数, 字符串常数, 保留字, 分界符.
保留字和分界符采用一符一类

常用状态图来作词法分析
先将正则表达式转化为非确定自动机(NFA: Non-deterministic Finite Automata)(存在某一个状态,对于同一个输入有不同的结果)
再将非确定自动机转化为确定自动机(DFA: Deterministic Finite Automata)
将确定自动机简化(直到不存在等价状态): 利用一致性状和蔓延性状态不断"分区",最终还在一个分区里的状态即可以简化
画图以及程序

状态图中: 双圈表示"终止符",圈内一般是非终止符,起始圈是新加进去的.

正则文法 和 正则表达式 的相互转化:

  1. AxB,By     AxyA\rightarrow xB, B\rightarrow y \ \ \ \ \ \Longleftrightarrow A \rightarrow xy.
  2. AxA  y             AxyA\rightarrow xA\ |\ y\ \ \ \ \ \ \ \ \ \ \ \ \ \Longleftrightarrow A \rightarrow x^*y.
  3. Ax,Ay        Ax  yA\rightarrow x, A\rightarrow y\ \ \ \ \ \ \ \ \Longleftrightarrow A \rightarrow x\ |\ y.

对于二义性问题:

  1. 最长匹配原则, 有更长则识别更长的
  2. 优先匹配原则, 规则序列越前优先级越高, 写规则序列时要注意

NFA的确定化:
集合IIε\varepsilon-闭包: (MM是自动机,IIMM的状态集一个子集)
sIs \in I,则sεClosure(I)s \in \varepsilon-Closure(I).
sIs \in I,则从ss出发经过任意条ε\varepsilon弧而能到达的任何状态都属于εClosure(I)\varepsilon-Closure(I).
εCloure(I)\varepsilon-Cloure(I)是集合IIε\varepsilon-闭包:
JJ是从II出发,沿aa弧到达的状态所组成的集合.
Ia=εClosure(J)I_a = \varepsilon-Closure(J).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章