资源描述:
《《个微小编译器》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章一个微小编译器任课教师王养廷主要内容基础知识ToyL语言ToyL词法分析程序1基础知识词法分析的基础知识基本符号程序设计语言中使用的符号。程序文本源程序程序文件ASCII序列的源文件语义单位单词:源程序中独立的语义单位1基础知识(续)词法分析的基础知识单词的分类标识符,如:x,y1,length保留字,begin,end,case,if常数,2,30运算符,+,-,<等界限符,(,),;编辑符,空格、回车、换行,制表符1基础知识(续)程序片断示例ifscore<60thenwriteln(‘fialed!’);该片断中的单词1基础知识
2、(续)词法分析的基础知识Token为了处理方便,对单词进行的编码,P10图语义信息Token中保留两类信息类别信息:Token.class语义信息:Token.seman1基础知识(续)词法分析的基础知识Token程序实现P10typedefstruct{intclass;charseman[];position_in_Filepos;}Token_typeclasssemanposition1基础知识(续)词法分析的基础知识读进字符从源程序中读入的字符用于得到单词识别字符判断字符是哪一类使用函数过滤格式滤掉空格类字符1基础知识(续)词法分析
3、的基础知识常数翻译读入字符串语义表示字符串数值实际语言中可能还有类型程序分析1基础知识(续)词法分析的基础知识程序voidrecognize_number(void){chardigits[10];dsp=0;next_char();while(is_digit(ch)){digits[dsp++]=ch;next_ch();}digits[dsp]=‘ ’Token.class=NUMBER;Token.seman=digits;}1基础知识(续)词法分析的基础知识程序voidrecognize_number(void){intn=0;n
4、ext_char();while(is_digit(ch)){n=n*10+ch=‘0’;next_ch();}Token.class=NUMBER;Token.seman=n;}1基础知识(续)词法分析的基础知识标识符读入标识符程序分析保留字1基础知识(续)词法分析的基础知识程序voidrecognize_identifier(void){charname[10];np=0;next_char();if(is_letter(ch)){name[np++]=ch;next_ch();}while((is_digit(ch)
5、
6、(is_lett
7、er(ch))){name[np++]=ch;next_ch();}name[np]=‘ ’Token.class=IDENTIFIER;Token.seman=name;}2ToyL语言语言定义简化的Pascal语言程序用begin和end扩起来类型有:integer语句赋值语句输入语句输出语句语法图P133ToyL语言词法分析词法分析从源程序到Token序列的转换Token设计设计单词类别ToyL语言共计13类,P13C语言的定义,P14对应的Token,P143ToyL语言词法分析Token例子源程序beginx:=10;read(y
8、);x:=x+yendToken序列设计找出单词列出Token3ToyL语言词法分析Token例子Token序列[1](BEGIN,“begin”)[2](IDEN,“x”)[3](ASS,“:=”)[4](NUMB,”10”)[5](SEMI,“;”)[6](READ,“read”)[7](OPEN,“(“)[8](IDEN,“y”)[9](CLOSE,“)”)[10](SEMI,“;”)[11](IDEN,“x”)[12](ASS,”:=”)[13](IDEN,“x”)[14](PLUS,“+”)[15](IDEN,“y“)[16](EN
9、D,“end”)3ToyL语言词法分析(续)Token类型设计保留字处理词法分析器的设计作用:分析源程序,列出Token主要子程序next_char()recongnize_number()recongnize_name()3ToyL语言词法分析(续)思考:词法分析程序的总体结构以上面程序为例分析词法分析程序的功能分析程序执行过程3词法分析程序(续)思考参考书中的算法自己设计一个词法分析程序自己设计一个表示Token的数据结构补充作业写出下面程序的Token序列beginread(a);write(a+10)end说明实验内容可以完成要求的P
10、L0分析也可以独立实现一个小编译器