第二章 词法分析 (Lexical Analysis)

Slides:



Advertisements
Similar presentations
七年级数学校本课程 台山市任远中学 李锦明. 1. 最古老的过河问题 1. 最古老的过河问题 一个农民携带一只狼,一只羊和一 箱卷心菜,要借助一条小船过河。 小船上除了农民只能再带狼、羊、 卷心菜中的一样。而农民不在时, 狼会吃羊,羊会吃菜。农民如何过 河呢?
Advertisements

A A A.
林園高中適性入學 高雄區免試入學 及 特色招生介紹 1. 國中學生 國中教育會考 1 ( 每年五月 ) 特色招生 術科考試 五專 免試入學 ( 每年六月 ) 特色招生 甄選入學 高中高職 免試入學 擇一報到 林園高中適性入學  入學管道流程 2.
开远市第一中学 2014年高考志愿填报指导会 2014年6月26日.
說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
德 国 鼓 励 生 育 的 宣 传 画.
第四章:长期股权投资 长期股权投资效果 1、控制:50%以上 有权决定对方财务和经营.
苏教版小学语文 二年级下册(五~八)单元教材分析
无锡商业职业技术学院 机电工程学院党总支孙蓓雄
这是一个数字的 乐园 这里埋藏着丰富的 宝藏 请跟我一起走进数学的 殿堂.
温 度 定义: 表示物体冷热程度的物理量。 国际单位:开尔文(K) 单位 常用单位:摄氏度(℃) 原理: 根据液体热胀冷缩的性质制成的。
8 企业信息管理的定量分析 第八讲 企业信息管理的定量分析 8.1 企业信息化水平的测评 8.2 企业信息管理绩效的测评.
全面了解入党程序 认真履行入党手续 第一讲 主讲人:陈亭而.
中共湖北大学知行学院委员会党校 入党材料规范填写指导 学工处 李华琼 二〇一三年十二月.
云南财经大学2010年党员发展培训—— 党员发展工作培训 校党委组织部 2010年9月17日.
成才之路 · 语文 人教版 • 中国古代诗歌散文欣赏 路漫漫其修远兮 吾将上下而求索.
《老年人权益保障》 --以婚姻法.继承法为视角
新准则与老准则 主要变更内容.
第三讲 事务性文书的写作 (计划 总结 调查报告 ).
一元一次方程的应用 行程问题.
欢迎大家来到生命科学课堂.
大道至简:自主学习拿高分 丽水市教育教学研究院 朱德飞.
高考新改革与过渡 怀化市铁路第一中学 向重新.
负 债 第九章 主讲老师:潘煜双 方正为人,勤慎治学.
必修Ⅰ 地球上的水 第三章.
南宁市兴宁区社区档案整理办法 南宁市兴宁区档案局 2010年 地址:南宁市厢竹大道63号兴宁区政府4楼
第八章 诉讼法 第一节 诉讼法概述 第二节 民事诉讼法 第三节 行政诉讼法 第四节 刑事诉讼法.
触电预防与急救 杜芳艳.
常用逻辑用语复习.
四种命题.
1.1.2 四 种 命 题.
1.2.2 充要条件.
3-2 解一元一次方程式 1.一元一次方程式的意義 2.一元一次方程式的解 3.等量公理 與移項法則 自我評量 例題1 例題2 例題3
普及纳米知识 推动科技进步.
专题二 识图题增分技巧.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
专题一 种群和群落 [考纲要求] 1.种群的特征(Ⅰ)。2.种群的数量变化(Ⅱ)。3.群落的结构特征(Ⅰ)。4.群落的演替(Ⅰ)。
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
邵阳文化.
4.4流体微团运动分析 借助于流体微团的概念来分析流体运动的组成 流体运动不同于刚体的一个显著区别:
电在我们日常生活、现代化社会中的应用: 电 是 什 么?.
勾股定理 说课人:钱丹.
台州市2011年科学学业考试试题的命制 台州初级中学 郭海平.
通 知 通知是批转下级机关的公文,转发上级机关和不相隶属机关的公文,传达要求下级机关办理和需要有关单位周知或执行的事项,任免人员时使用的公文。
江苏省2009年普通高校 招生录取办法 江苏省教育考试院
第 二 章 逻 辑 代 数 基 础.
编译原理与技术 词法分析(1) 2018/11/28 《编译原理与技术》讲义.
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
数字电子技术 湖南计算机高等专科学校李中发 胡锦 制作.
一元一次方程式的意義 一元一次方程式的解 等量公理與移項法則 自我評量.
1.2.2 充要条件.
二元一次聯立方程式 代入消去法 加減消去法 自我評量.
第二部分 集合论 第六章 集合代数 主要内容 集合的基本概念 属于、包含 幂集、空集 文氏图等 集合的基本运算 并、交、补、差等 集合恒等式
數學少林寺 因式分解 寺址:新竹縣立中正國民中學 長老:林永章、廖玉真.
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
大綱:整數的加法 整數的減法 蘇奕君 台灣數位學習科技股份有限公司
不等式的基本性质 本节内容 本课内容 4.2.
9.1.2不等式的性质 周村实验中学 许伟伟.
分 解 因 式 保定市第二十六中学 刘彦莉.
第三节 二项式定理.
(5) (-5x)(-7x+2) =__________ (6) 7x(5x2+6x-3) = _______________ -27x2
職業學校群科課程綱要規劃原理及修訂重點 報告人:鄭慶民
北师大版四年级数学下册 手拉手 —小数的混合运算、简算.
4-2 配方法與公式解.
職業學校課程綱要發展指導委員會第2次會議 職業學校課程綱要總綱 修訂說明報告 計畫主持人:國立臺灣科技大學 蔡顯榮主任.
目录 12.1 位运算符 12.2 位域(位段) 1.
1.8 完全平方公式(一) 锦州市实验学校 数学组(3).
05 债务重组.
在下列空格中,填入適當的式子: (1)(-3x)‧9x=__________ -27x2 (2)(3x2)2 =__________
8的乘法口诀 导入 新授 练习.
Presentation transcript:

第二章 词法分析 (Lexical Analysis) 主讲:申春

词法分析在编译程序中的逻辑位置 词 法 分 析 表 处 理 源 程 序 语 法 分 析 语 义 分 析 中 间 代 码 生 成 中 间 代 优 化 目 标 代 码 生 成 目 标 程 序 错 误 处 理

主要内容 词法分析程序的功能 单词分类及内部表示 ※单词的描述技术—正则表达式和自动机 词法分析程序的设计与实现步骤

2.1 词法分析概述 词法分析器的任务: (1)对输入的字符串形式的源程序按顺序进行扫描,识别输出具有独立意义的单词序列; 2.1 词法分析概述 词法分析器的任务: (1)对输入的字符串形式的源程序按顺序进行扫描,识别输出具有独立意义的单词序列; (2)检查源程序中的词法错误。 源程序 字符序列 词法分析程序 (Scanner) 单词序列

单词:是指具有独立含义的最小的语义单位。 C语言源程序: void main() { int x1; x1= 1; if( x1>0 ) x1=x1+10; } 词法分析程序输出由单词内容和单词的类别组成的内部表示序列 单词:是指具有独立含义的最小的语义单位。

2.2 单词的分类 个数有限 个数无限 10, 3.14 个数有限

void main() { int x1; x1=1; if(x1>0) x1=x1+10; } 词法分析输出 单词序列 <保留字,void> <保留字,main> <界限符,(> <界限符,)> <界限符,{> <保留字,int> <标识符,x1> <界限符,;> <标识符,x1> <运算符,=> <常量,1> <界限符,;> <保留字,if> <界限符,(> <标识符,x1> <运算符,>> <常量,0> <界限符,)> <标识符,x1><运算符,=><标识符,x1><运算符,+><常量,10> <界限符,}>

如何实现词法分析器 1. 明确要分析的问题 2. 利用形式化方法描述各类单词的词法规则 正则表达式 自动机 3.设计词法分析算法

2.3 单词的形式描述工具 正则表达式 正则表达式,又称正规表示法、常规表示法(Regular Expression,代码中常简写为regex、regexp或RE)。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

2.3.1 符号和符号串基本概念 (1).字母表(alphabet ) 2.3.1 符号和符号串基本概念 (1).字母表(alphabet ) 字母表是元素的非空有穷集合,通常用∑表示。字母表中的一个元素称为该字母表的一个字母(letter),也可叫做符号(symbol)或者字符(character)。 例如: Σ={a,b,c,d,…,z,A,B,…Z}, Σ={0,1,…,9}, Σ=ASCII,Σ=unicode

(2).符号串 是由字母表中的符号组成的任意有穷序列。符号串还可以称为“字符串”、 “句子”,一般用,,….,x,y,z表示。 符号串中字符的个数称为符号串长度, 用||表示符号串的长度。 表示空串。 ||=0; 空串集{}不同于空集 。 例如:Σ={0,1} =01 , =101

(3).符号串连接 设和 均是字母表∑上的符号串, 和的连接是把的所有符号顺次地接在的所有符号之后所得到的符号串。记为: 。 例如: 设  = abc ,  = de ,则和的连接:  = abcde ||=||+||。 由于是不包含任何符号的字符串,特别有:  =  =  连接运算不满足交换律。

4.符号串的方幂 设x是字母表∑上的符号串,把x自身连接n次得到的符号串z,称作符号串x的n次幂,记作 z = xn 。根据定义有: x2 = xx x3 = x2x = xx2 = xxx …… xn = xn-1x = xxn-1 = xx…xx (n个x) 例: 设x = 001,则有: x0 = ε x1 = 001 x2 = 001001 x3 = 001001001

(6). 符号串集合:若集合A中的所有元素都是某字母表∑上的符号串,则称A为该字母表上的符号串集合。 (7).符号串集的乘积 设A、B 是两个符号串集合,AB表示A与B的乘积,具体定义为: AB = { xy | ( x∈A ) ∧ ( y∈B )} 例: 设 A = { a, bc } , B ={ de, f } ,则: AB = { ade, af, bcde, bcf }

(8).符号串集合的方幂 设A为符号串的集合,则称Ai为符号串集A的方幂。具体定义如下: A0= {  } A1 = A A2 = AA …… An =An-1A = AAA……A (n个) 例:A= { a,b } 则: A0 = {  } A1 = { a,b } A2 = AA = { a,b }{ a,b }={ aa,ab,ba,bb } A3 = A2A ={ aa,ab,ba,bb }{ a,b } ={ aaa,aab,aba,abb,baa,bab,bba,bbb } An =An-1A = AAA……A

A0= {  } A1 = A A2 = AA …… An =An-1A = AAA……A (n个) 例:A= { a,b,c,d,…,z } 则: A0 = {  } A1 = { a,b,c,…,z } A2 = AA = 长度为2的小写英文字符串集 A3 = A2A =长度为3的小写英文串集 An =An-1A =长度为n的小写英文串集

设A为符号串的集合,则称A+为符号串集A的正闭包.具体定义如下: (9).符号串集合的正闭包 设A为符号串的集合,则称A+为符号串集A的正闭包.具体定义如下: A+ = A1 ∪ A2 ∪ A3 ∪ …… ∪ An ∪ …… 例1:A= { a,b } 则: A+ :表示所有由a,b组成的字符串集合。 例2:letter= { a,b ,c,….,z,A,B,…..,Z} 则: letter+ :所有英文字符串集合。 ZZZ 例3:digit= { 0,1,…9} 则: digit+ :所有数字串集合。

例:letter= { a,b ,c,….,z,A,B,…..,Z} 则: letter* :表示包含空串和所有英文字符串的集合。 (10).符号串集合的星闭包 设A为符号串的集合,则称A*为符号串集A的星闭包.具体定义如下: A* = A0 ∪A1 ∪ A2 ∪ A3 ∪ …… = A0 ∪ A+ = {  } ∪ A+ 例:letter= { a,b ,c,….,z,A,B,…..,Z} 则: letter* :表示包含空串和所有英文字符串的集合。 ZZZ

2.3.2 正则表达式 正则表达式是用来描述正则集的一种代数表达式,也称为正规表达式。 形式:用事先定义好的一些特定字符,以及对这些特定字符进行组合运算,形成的一个“规则字符串”。如:(1|2|…|9)(0|1|2|…|9)*|0 作用:用来定义一类字符串的一种过滤逻辑。 所有符合正则表达式r所定义的规则(模式)的符号串集合, 称为正则集或正规集,表示为L(r)。L(r)也称为由r定义的语言。

(一)正则表达式和正则集的递归定义 设∑为字母表 (1) 和 是∑上的正则表达式,它们所表示的正则集分别为L(ε)={ε}, L()={}. (2) 对任何a∈∑,a 是∑上的正则表达式,它所表示的正则集L(a)={a}; (3)若r和s都是∑上的正则表达式,它们所表示的正则集分别为L(r)和L(s),则 (r)也是∑上的正则表达式,表示的正则集L((r))= L(r) r|s也是∑上的正则表达式,表示的正则集L(r|s)= L(r) ∪ L(s) r s也是∑上的正则表达式,表示的正则集L(r  s)= L(r)L(s) r*也是∑上的正则表达式,表示的正则集L(r*)= (L(r))* 有限次使用上述3条规则构成的表达式称为∑上的正则表达式,表示的字符串集合称为∑上的正则集或正规集。

正则表达式定义中的四种运算的作用 括号(r):不改变r表示的正则集,主要是用于确定运算优先关系 或运算 |:把复杂问题分成几个种情况依次定义正则表达式,然后把这些正则表达式用或运算连接起来描述整个问题。 连接运算  :把一个大问题分成前后关联的几个部分依次定义正则表达式,然后把各部分正则表达式按先后顺序用连接运算连接起来描述问题。为了方便表达,经常省略这个 。例如:rs也可表示为rs。 *运算:r*表示对正则表达式r所描述的文本进行0到若干次循环连接。 实际应用中会扩充很多正则表达式的运算,如: r+也是∑上的正则表达式,表示的正则集L(r+)= (L(r))+

(二)正则表达式示运算符优先级 括号()> *运算 > 连接运算 > |或运算

例1: 正则表达式e L(e) 1.a {a} 2.a|b {a, b} 3.ab { ab } 4.(a|b) (a|b) {aa, ab, ba, bb} 5. a* {ε,a,aa,aaaa,…}

(三)正则表达式的性质 (1)交换律: A|B = B|A (2)结合律: A|B|C = (A|B)|C = A|(B|C) ABC = (AB)C = A(BC) (3)分配律: A(B|C) = AB|AC (A|B)C = AC|BC (4)幂等律: A** = A* (5)同一律: A = A = A

例2 ={ a,b }. 正则表达式r 表示的正则集L(r) ab* 2. a(a|b)* L(a(a|b)*) =L(a) L( (a|b)*) =L(a) (L(a|b))* ={a}{a,b}* L(ab*) =L(a) L(b*) ={a}{ε,b, bb,bbb,…} ={a,ab,abb,abb,…} ={ a,b }. 正则表达式r ab* 2. a(a|b)* 表示的正则集L(r) 上所有以a为首后跟0个或任意多个b的字符串集 上所有以a为首的字符串集

例3 表示整数的正则表达式 D=0|1|2…|9 ,D表示一位数字 则D+ :可以表示允许0前导整数 D=0|1|…|9, D1=1|2|…|9 D1D*:表示无符号正整数 (+D1D*)|(-D1D*)|0:表示有符号整数 (+|-|)(D1D*)|0 :表示整数

(四)词法分析中的单词描述 保留字: while|if|for|… 标识符:L(L|D)*, 其中L=A|B|…Z|a|b|…|z|_; 常数 1. 整数: (+|-|)(D1D*)|0, 其中 D1=1|2|…|9 2. 实数: (+|-|)(D1D*|0).D+ 特殊符号 1. 运算符:+|-|*|… 2. 分界符:{|}|;|… 3. 控制符:\t|\n|…

练习: 设字母表={0,1},试写正则表达式 所有上定义的串 表示二进制数 能被2整除的二进制