编译器的自动生成工具lex和yacc的使用方法

编译器的自动生成工具lex和yacc的使用方法

ID:11579929

大小:155.00 KB

页数:29页

时间:2018-07-12

编译器的自动生成工具lex和yacc的使用方法_第1页
编译器的自动生成工具lex和yacc的使用方法_第2页
编译器的自动生成工具lex和yacc的使用方法_第3页
编译器的自动生成工具lex和yacc的使用方法_第4页
编译器的自动生成工具lex和yacc的使用方法_第5页
资源描述:

《编译器的自动生成工具lex和yacc的使用方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译器的自动生成工具LEX和YACC的使用方法一、词法分析程序产生器LEX的用法1.1Lex概述Lex是一个词法分析器(扫描器)的自动产生系统,它的示意图如图1.1。Lex源程序是用一种面向问题的语言写成的。这个语言的核心是正规表达式,用它描述输入串的词法结构。在这个语言中用户还可以描述当某一个词形被识别出来时要完成的动作,例如在高级语言的词法分析器中,当识别出一个关键字时,它应该向语法分析器返回该关键字的内部编码。Lex并不是一个完整的语言,它只是某种高级语言(称为lex的宿主语言)的扩充,因此lex没有为描述动作设计新的语言,而是借助其宿主语言来描述动作。我们只介

2、绍C作为lex的宿主语言时的使用方法,在Unix系统中,FORTRAN语言的一种改进形式Ratfor也可以做lex的宿主语言。图1.1Lex示意图   Lex自动地表示把输入串词法结构的正规式及相应的动作转换成一个宿主语言的程序,即词法分析程序,它有一个固定的名字yylex,在这里yylex是一个C语言的程序。yylex将识别出输入串中的词形,并且在识别出某词形时完成指定的动作。 看一个简单的例子:写一个lex源程序,将输入串中的小写字母转换成相应的大写字母。程序如下:%%[a-z]printf(“%c”,yytext[0]+'A'-'a');上述程序中的第一行%%是

3、一个分界符,表示识别规则的开始。第二行就是识别规则。左边是识别小写字母的正规式。右边就是识别出小写字母时采取的动作:将小写字母转换成相应的大写字母。 Lex的工作原理是将源程序中的正规式转换成相应的确定有限自动机,而相应的动作则插入到yylex中适当的地方,控制流由该确定有限自动机的解释器掌握,对于不同的源程序,这个解释器是相同的。1.2lex源程序的格式lex源程序的一般格式是:{辅助定义的部分}    %%    {识别规则部分}%%    {用户子程序部分}其中用花括号起来的各部分都不是必须有的。当没有“用户子程序部分”时,第二个%%也可以省去。第一个%%是必须

4、的,因为它标志着识别规则部分的开始,最短的合法的lex源程序是: %%  它的作用是将输入串照原样抄到输出文件中。  识别规则部分是Lex源程序的核心。它是一张表,左边一列是正规式,右边一列是相应的动作。下面是一条典型的识别规则:integerprintf("foundkeywcrdINT");这条规则的意思是在输入串中寻找词形“integer”,每当与之匹配成功时,就打印出“foundkeywordINT”这句话。注意在识别规则中,正规式与动作之间必须用空格分隔开。动作部分如果只是一个简单的C表达式,则可以写在正规式右边同一行中,如果动作需要占两行以上,则须用花括号

5、括起来,否则会出错。上例也可以写成:integer{printf("foundkeywordINT");} 下面先介绍识别规则部分的写法,再介绍其余部分。1.3Lex用的正规式一个正规式表示一个字符串的集合。正规式由正文字符与正规式运算符组成。正文字符组成基本的正规式,表示某一个符号串;正规式运算符则将基本的正规式组合成为复杂的正规式,表示字符串的集合。例如:ab仅表示字符串ab,而(ab)+表示字符串的集合:{ab,abab,ababab,…}。Lex中的正规式运算符有下列十六种:    “[]^-?•*+

6、()/${}%<>上述运算符需要作为正文字符出现在正规式

7、中时,必须借助于双引号”或反斜线\,具体用法是;xyz“++”或xyz\+\+表示字符串xyz++为避免死记上述十多个运算符,建议在使用非数字或字母字符时都用双引号或反斜线。要表示双引号本身可用\”,要表示反外线用”\”或\前面说过,在识别规则中空格表示正规式的结束,因此要在正规式中引进空格必须借助双引号或反斜线,但出现在方括号[]之内的空格是例外。几个特殊符号:\n是回车换行(newline)\t是tab b是退格(backspace)下面按照运算符的功能分别介绍上述正规式运算符。1.字符的集合用方括号对可以表示字符的集合。正规式 [abc]与单个字符a或b或c

8、匹配在方括号中大多数的运算符都不起作用,只有\、-和^例外。运算符-表示字符的范围,例如[a-z0-9<>_]表示由所有小写字母,所有数字、尖括号及下划线组成的字符集合。如果某字符集合中包括-在内,则必须把它写在第一个或最后一个位置上,如[-+0-9]与所有数字和正负号匹配。在字符集合中,运算符^必须写在第一个位置即紧接在左方括号之后,它的作用是求方括号中除^之外的字符组成的字符集合相对于计算机的字符集的补集,例如[^abc]与除去a、b和c以外的任何符号匹配。运算符\在方括号中同样发挥解除运算符作用的功能。1.与任意字符匹配的正规式 运算符•形成的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。