编译器词法分析程序功能_第1页
编译器词法分析程序功能_第2页
编译器词法分析程序功能_第3页
编译器词法分析程序功能_第4页
编译器词法分析程序功能_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ch3Ch33.1(Scanner112233例3.1有如下C{{intint1=printf("int1=}{intint1;int1=33;printf("int1=%d",int1);}4{、int、int1、;、int1433;printf}55Ch3Ch33.23.2.1

* …int 667Ch3词法分 3.2词法分析器的设计与实 3.2.1单词与属性7<关键字>int|float|for|include|char|<标识符<字母>{<字母>|<数字V<字母>(<字母>|<数字<<标识符a<后缀|b<后缀|…|z<后缀 a<后缀>|b<后缀>|…|z<后缀>0<后缀>|1<后缀>|…|9<后缀>Ch3Ch33.23.2.1FORTRAN实型常数定义F型:a..bE型:a.Ed,a.bEd,aEd,.bEdD型:a.Dda.bDdaDd.bDd8a:整数部分; b:小数部分; d:指数部分;E、D:8关键字一般是语言系统本身定义的,通常是由字C语言中的intforbreakstatic,char,switch,unsigned等,关键字一般关联到语句99语言中各种类型的常数。如整型常数,实型常数,不同进制的常数,布尔常数,字符及字符串常Char、String:'$'$123'1010表示程序中算术运算,逻辑运算,字符及位串等&,%=1111

12#12L1=1313例3.2:字长m=16 标常构过保运实界I 造程留算参 符量 字 1414integer对语句xa+b;xa+xa+b; 15 15 1616

……171718DO101810

1919

…2020++–*/… Ch3Ch33.23.2.21 1 i++;j++;…switchBF BF(first

(second2121if(F{重装后半区;}elseif(F到达后半区的末尾F}2222 2323预处理程序:(作用

2424Ch3Ch33.23.2.32525设计工具step1 step2:将各类状态图合并,构成一个能识别该语例3.3设某语言由标识符和无符号正整数两类单词构成,并设L表示字母,D表示十进制数1L1L23L|D|0D0D12D

262627271L1L23L|D|10 210DD L|D| DD2828

29291L1L23L|D|D4D5D 设C语言子集由下列单词符号构成,以关键字:int,if,运算符或分界符:30P58——300L0L1L|20D1D0D1D2*0=0=10*0*10+10{1+0+10{1+0}=1234{31310L0LL|12D*+3567D4={+=}89other=* {}3232

33333434 终态时,分表地址为子程序入口终态时,为分表入口0LL|0LL|12DD34=*+567{+=}89other35状态0状态01 3子程序(=子程序7(4子程序*9子程序子程序子程序子程序**36 36 other

L|

13=5*6+7{}

112分表34++9=8 据W查分表,将WB,(B)是终态?是3);37373838例3.5/ii/jklI(chartype{char1=nextchar( if(state==i)switch(char1{

//lcase„0‟…„9‟:K(chartype,char1);break;case„/‟:L(chartype,char1);break;default:error;}}其中:J,K,Lj、k、l39nextchar(39intstate=enumlettet('a'..'z'enumnumber('0'..'9');charchar1;{char1=nextchar();switch(state){case0:switch'a'…'z''a'…'z'state='0'…'9'state= state= state= state='{ state=

case'}' :state=12;break; :state=13;4040case6:case6:return05, /*属性05*41case1:while(char1==letter||number)char1=nextchar();state=2;case2:untread(/*return(02,value)or (01,value /*属性01表示关键字;02*/case3:while(char1==number)char1=nextchar();state=4;case4:untread( /*return(03,value);break;/*03:无符号整常数*/case5: return(04, );break; case char1=nextchar(if(char1=='+')state=elseif(char1==”=”)state=10;elsestate=8;case8 :untread();return(08,);break; /*属性08表示“+”*/case9:return(09, );break;/*属性09表示“++”*/case10:return(12, );break;/*属性12表示“+=”*/case11:return(10, );break; /*属性10表示“{”*/case12:return(11,);break; /*属性11表示“}”*/case13: /*error是语法错处理函数 /*end switch(state)4242.——FA4343二.定义在某语言字母表Σ上的单词,然后从此正规式出DFAM;44M"DFA444545XYXYZ+①I=0;A=„②③I=I(a/*(I,A)I /*“+”I46(46三.扫描器自动生成器——LEX——(LexicalAnalyzer1972UNIXFlex(FastLexicalAnalyzer47始于1984GNULEX的47(语言x的词法

LEXLEXLEXLEX源程序,产生一个词法分析器作为输出。在UNIX环境中,LEX编译器的输出是一个具有标准文件名lex.yy.cC程序,经过C编译器的编译产生4848编辑LEX源程序(例如,生成文本格式的PAS语言的LEX源文件PAS.l);使用命令:lexPAS.l运行LEX,正确则输出

调用Clex.yy.c,并与其它C模块连接

4949

/*包含模式宏定义和C{Ai/*规则动作部分所需的辅助过程的的C5050#include<stdio.h>#include<ctype.h>externintflag#defineMarry1#define intERROR=-chardigit[0-

alpha[a-zA-alnum[a-zA-Z0-5151

5252{Ai 5353 x[^abA-Z\n](可为[^a-e]\转义符定义同ANSI•5454例3.7<=>5555#include<stdio.h>#include<ctype.h>#include#1#2#3#4#5#6#7#8#9#5656/*正规式模式宏定义*/ [\t\n] {/*noactionandnoreturn*/} {return(IF);} {return(THEN); {return(ELSE); {yylval=install_id();return(ID);{number}{yylval=install_num();return(NUMBER);} {yylval=LT; return(RELOP);}"<="{yylval=LE;return(RELOP);} {yylval=EQ;return(RELOP);}"<>"{yylval=NE;return(RELOP);} {yylval=GT;return(RELOP);}">="{yylval=GE;return(RELOP);5757install_id({/*proceduretoinstallthelexeme,whosefirstcharacterisprintedtobyyytextandwhoselengthisyyleng,intothesymboltableandreturnapointerthereto*/}install_num({/*simllarproceduretoinstallalexemethatisanumber*/5858⑴对LEX源程序识别规则中的每个Pi构造一个相应的NFAMi。⑵引入惟一初态X,从初态X通过ε弧将所有NFAMi(i=1,...,n)连接成新的NFAM'。NFAM'DFAM,实现此步变DFAMZ5959①I=0;A=„②③ /*(I,A)I /*“+”I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论