词法分析正则表达式课件



《词法分析正则表达式课件》由会员分享,可在线阅读,更多相关《词法分析正则表达式课件(21页珍藏版)》请在装配图网上搜索。
1、,啊,啊,*,编译原理,*,词法分析正则表达式,授课:胡静,12/15/2024,2004年12月28日,1,编译原理,词法分析正则表达式10/9/20232004年12月28,目录,编译器的结构,编译的例子,什么是词法分析,如何编写一个词法分析器,正则表达式用来描述tokens,编写一个词法分析器的生成器,12/15/2024,2,编译原理,目录编译器的结构10/9/20232编译原理,编译器的应用模型,出,错,处,理,语法分析程序,语义分析程序,目标代码生成程序,词法分析程序,中间代码生成程序,代码优化程序,表,格,管,理,编译的前端,(Front End),编译的后端,(Back End
2、),12/15/2024,3,编译原理,编译器的应用模型出语法分析程序语义分析程序目标代码生成程序词,以语法分析器为核心的编译器模型,语法分析器,词法分析器,中间代码生成器,语义分析器,一部分中间代码,输入字符串,程序入口,初始化工作,12/15/2024,4,编译原理,以语法分析器为核心的编译器模型语法分析器词法分析器中间代码生,一个简单的编译器结构,12/15/2024,5,编译原理,一个简单的编译器结构10/9/20235编译原理,这个结构是如何进行工作的,12/15/2024,6,编译原理,这个结构是如何进行工作的10/9/20236编译原理,这个结构是如何进行工作的,12/15/20
3、24,7,编译原理,这个结构是如何进行工作的10/9/20237编译原理,第一步:词法分析,12/15/2024,8,编译原理,第一步:词法分析10/9/20238编译原理,tokens,Identifiers:x y11 elsen _i00,Integers:2 1000 -500 5L,Floating point:2.0 0.00020 .02 1.1e5 0.e-10,Strings:“x”“He said,“Are you?”,Comments:/*dont change this*/,Keywords:if else while break,Symbols:+*+=,12/15/
4、2024,9,编译原理,tokensIdentifiers:x,特别的词法分析器,手写代码来产生tokens,如何读取标识符tokens?,12/15/2024,10,编译原理,特别的词法分析器手写代码来产生tokens10/9/2023,Look-ahead Character,一次扫描一个字符,使用向前看字符(next)的方法来决定将要读到的是什么类型的token,以及当前这个token的结尾在何处。,12/15/2024,11,编译原理,Look-ahead Character一次扫描一个字符10,特别的词法分析器:高层循环,12/15/2024,12,编译原理,特别的词法分析器:高层循
5、环10/9/202312编译原理,问题的提出,如果只向前看一个字符,不能够确定我们将要读入的是哪种类型的token,如果token的开头是“i”,那么它一定是标识符么?,如果token的开头是“2”,那么它一定是一个整型的常数么?,如果我们通过上面的类似“插入”式的方法来写识别token的程序,这样的程序不容易写正确,而且也不容易维护,因此需要一个更加有原理性的方法:词法分析器的生成器,可以自动产生有效的词法分析器。(例如lex,flex,Jlex),一般说来,没有限制的向前看是必要的,12/15/2024,13,编译原理,问题的提出如果只向前看一个字符,不能够确定我们将要读入的是哪,一些问题
6、,如何明确的描述tokens,2.e0 20.e-01 2.0000,“”“x”“”“”,如何将文本分割成tokens,if(x=0)a=x1;,if(x=0)a=x1;,12/15/2024,14,编译原理,一些问题如何明确的描述tokens10/9/202314编译,如何描述tokens,我们可以使用,正则表达式,来描述程序设计语言中的tokens,正则表达式(RE,Regular Expression)的定义如下:,a ordinary character stands for itself,the empty string,R|S either R or S(alternation),
7、where R,S=RE,RS R followed by S(concatenation),where R,S=RE,R*concatenation of a RE R zero or more times,(R*=|R|RR|RRR|RRRR),在实际形式中,会有优先级的限制,因此可以加入一些括号。,12/15/2024,15,编译原理,如何描述tokens我们可以使用正则表达式来描述程序设计语言,简单的例子,正则表达式R描述的字符串的集合表示为L(R),L(R)=由R定义的“语言”,L(abc)=abc,L(hello|goodbye)=hello,goodbye,L(1(0|1)*)=
8、所有的非零二进制数,我们可以用正则表达式来定义每种类型的token,12/15/2024,16,编译原理,简单的例子正则表达式R描述的字符串的集合表示为L(R)10/,一些RE的简写,R,+,one or more strings from L(R):R(R*),R?,optional R:(R|),abce,one of the listed characters:(a|b|c|e),a-z,one character from this range:(a|b|c|d|e|y|z),ab,anything but one of the listed chars,a-z,one charact
9、er not from this range,12/15/2024,17,编译原理,一些RE的简写R+10/9/202317编译原理,简单的例子,正则表达式,digit=0-9,posint=digit+,int=-?posint,real=int(|(.posint),=-?0-9+(|(.0-9+),a-zA-Z_a-zA-Z0-9_*,在L(R)中的字符串,“0”“1”“2”“3”,“8”“412”,“-42”“1024”,“-1.56”“12”“1.0”,C identifiers,这种简写方式不支持递归,12/15/2024,18,编译原理,简单的例子正则表达式在L(R)中的字符串这
10、种简写方式不支持递,如何切分文本,只有RE是不够的,还需要一些进行选择的规则,大部分的语言,优先选择最长的匹配,当最长匹配长度相同时,由优先级决定,REs+优先级+最长匹配规则=词法分析器的定义,12/15/2024,19,编译原理,如何切分文本只有RE是不够的,还需要一些进行选择的规则10/,小结,词法分析器将文本流转换成tokens,特殊的词法分析器不容易写的正确,而且不易维护,对大部分语言来说,合法的tokens都可以由正则表达式方便的精确的定义。,12/15/2024,20,编译原理,小结词法分析器将文本流转换成tokens10/9/20232,Thanks for your time!,Questions&Answers,12/15/2024,21,编译原理,10/9/202321编译原理,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。