编译原理复习笔记-词法分析

词法分析的几个问题

术语

  • 模式(pattern):产生和识别元素的规则
  • 记号(token): 按照某个模式(或规则)识别出的元素(一组)。记号的区分:记号=记号的类别+记号的属性
  • 单词(lexeme):被识别出的元素自身的值(一个),也称为词值

作用

  • 滤掉源程序无用成分
  • 处理与平台有关输入
  • 根据模式识别记号,并交给语法分析器
  • 调用符号表管理器或出错处理器,进行相关处理 。

工作方式

  • 单独扫描,产生记号流供语法分析器使用。
  • 作为语法分析器的子程序,并行工作。

模式的形式化描述

语言L是有限字母表∑上有限长度字符串的集合。(注意:字符表有限,字符串长度有限)

令Σ是一个有限字母表,则Σ上的正规式及其表示的集合递归定义如下:

  1. ε是正规式,它表示集合L(ε)={ε}
  2. 若a是Σ上的字符,则a是正规式,它表示集合L(a)={a}
  3. 若正规式r和s分别表示集合L(r)和L(s),则
  • r|s是正规式,表示集合L(r)∪L(s),
  • rs是正规式,表示集合L(r)L(s),
  • r*是正规式,表示集合(L(r))*,
  • (r)是正规式,表示的集合仍然是L(r)

可用正规式描述的语言称为正规语言或正规集。

运算性质

  1. 三种运算(并,连接,闭包)具有左结合性
  2. 优先级:闭包>连接>或。
  3. 不同正规式可表示同一个正规集,即正规式与正规集是多对一。
  4. 若正规式P和Q表示了同一个正规集,则称P和Q是等价的,记为P = Q。
  5. 等价性判断:根据定义或代数性质。
  • r | s = s | r
  • ( r s ) t = r ( s t )
  • r | ( s | t ) = ( r | s ) | t
  • ε r = r, r ε = r
  • r ( s | t ) = r s | r t
  • r* = ( r+ | ε )
  • ( s | t ) r = s r | t r
  • r** = r*

简化正规式的几个技巧

  • 正闭包:r+ = r r* = r* r,r* = r+ | ε
  • 可缺省:r?=r|ε
  • 仅由|运算构成的正规式,则可改写为[r],其中包括枚举或分段。
  • [r]是一个字符组形式的正规式,则[^r]是表示∑ - L(r)的正规式。

记号的识别——有限自动机

模式的描述使用正规式,记号的识别使用有限自动机。

有限自动机:M =(S,∑,move,s0,F),其中

  1. S是有限个状态(state)的集合;
  2. ∑是有限个输入字符(包括ε)的集合;
  3. move是一个状态转移函数,move(si,ch)=sj表示,当前状态si下若遇到输入字符ch,则转移到状态sj;
  4. s0是唯一的初态(也称开始状态);
  5. F是终态集(也称接受状态集),它是S的子集,包含了所有的终态。

有限自动机的几点说明

  • 最长识别原则:如<=的识别。
  • 不确定性:在当前状态下对同一字符有多于一个的下一状态转移。 (反复试探,指数增长,大量回溯)

DFA:NFA的特例,具有确定性。

  1. 没有状态具有 ε 状态转移
  2. 对每个状态 s 和每个字符 a ,最多有一个下一状态。

有限自动机之间的等价性: 若有限自动机M和M’识别同一正规集,则称M和M’是等价的,记为M=M’。

正规式与有限自动机从两个侧面表示正规集。正规式是描述,自动机是识别。因此,当它们表示相同集合时,均存在等价的问题。

从正规式到词法分析器

步骤: 描述(正规式描述模式)-构造NFA(一对一构造)-确定化(等价的DFA)-最小化(最少的状态数)-构造词法分析器

从正规式到NFA:Thompson算法

先用语法树右分解正规式,再自下而上构造NFA。

  1. 对ε,构造NFA N(ε) 接受{ε}:直接构造
  2. 对∑上的每个字符a,构造NFA N(a) 接受{a}:直接构造
  3. 若N(p)和N(q)是正规式p和q的NFA,则
  1. 对正规式p|q,构造NFA N(p|q):接受L(p)∪L(q):把初态和终态取出合并,且增加初态和终态两条ε的路径
  2. 对正规式pq,构造NFA N(pq) 接受L(p)L(q):把N(p)的终态和N(q)初态合并
  3. 对正规式p*,构造NFA N(p*) 接受L(p*):增加从初态到终态的ε路径,且在N(p)内部有从最后指向最前的ε路径
  4. 对于正规式(p),使用p本身的NFA,不再构造。

确定化:从NFA到DFA

  • 并行 用状态集取代状态,将不确定的下一状态确定化。 状态集:ε闭包(路径上是ε相连的状态)+ smove(S,a)
  • 子集法 将路径确定化并记录下来,得到等价的DFA。

方法:将并行法每一个状态集编号,得到编号之间的转换关系。

最小化DFA

若从s和t来分析序列w均可得到相同的结果,则s,t是不可区分的,即可合并的。最小化就是反向利用可区分。一开始,仅有非终态和各终态是可区分的,经过划分,把可区分的状态分离,直到不可分离,最后不可区分的状态合并成一个状态。
算法:

  1. 初始划分:分为终态和非终态。
  2. 反复分裂划分组:若某个集合某个元素可以指向已经被划分出来的元素,则将该元素划分出来,直到不可再分裂。
  3. 选取代表,修改状态转移。
  4. 消除死状态和不可达状态。

DFA构造词法分析器

  1. 表驱动型的词法分析器:速度慢,程序与模式无关,规模大,可用工具生成
  2. 直接编码的词法分析器:速度快,程序与模式有关,规模较小,需要手工编写
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容

  • 词法分析的问题 术语 模式(pattern):产生和识别元素的规则 记号(token): 按照某个模式(或规则)识...
    有苦向瓜诉说阅读 2,029评论 0 0
  • 编译原理 第一章 引言 1.从面向机器的语言到面向人类的语言 汇编指令:用符号表示的指令被称为汇编指令汇编语言:汇...
    SnorlaxSE阅读 54,849评论 5 60
  • 一、绪论 编译程序 功能:高级pro转低级目标pro 形式编译执行转obj在执行,效率高跨平台性差解释执行逐行解释...
    rh_Jameson阅读 3,552评论 0 10
  • 你说你孤独 就象很久以前 火星照耀十三个州府 你那样孤独 你在夜里哭着 象一只木头一样哭着 象花色的土散着香气 ...
    桥度阅读 3,996评论 0 0
  • 1 我得先说,我是只苍蝇。当然,我从不因此而自卑,因为我...
    天使啾啾阅读 689评论 8 7