资源描述:
《3 第3章 词法分析1 (2)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第三章词法分析与有穷自动机编译过程词法分析语法分析语义分析及中间代码生成代码优化目标代码生成词法规则→单词符号语法规则语法单位语义审查中间代码等价变换更为高效机器指令代码3.1词法分析程序的任务对字符串表示的源程序prog从左到右进行扫描和分解根据词法规则识别出一个一个具有独立意义的单词符号syn,token,sum3.2.1语言的单词符号是指语言中具有独立意义的最小语法单位可分为以下五种关键字,也称基本字,if,then,while,do等标识符,表示各种名字,如变量名、数组名、函数名等,如charch,intsyn,token,s
2、um常数,如123,4587运算符,如+,-,*,/,:=,<=,>,<>等界符,,;():等3.2.2词法分析程序的输出形式二元式(单词种别,单词自身的值)单词种别,表明单词的种类,语法分析需要的重要信息整数码关键字、运算符、界符:一符一码标识符:10,常数:11单词自身的值标识符token、常数sum关键字、运算符、界符token实验1:词法分析实验目的:编制一个词法分析程序实验要求:待分析语言的词法:关键字:beginifthendoend运算符::=+-*/<<=<>>>==;()#标识符l(l
3、d)*,整型常数dd*空格各种单
4、词符号对应的种别码单词符号种别码单词符号种别码begin1:17if2:=18then3<20while4<=21do5<>22end6>23l(l
5、d)*10>=24dd*11=25+13;26-14(27*15)28/16#0词法分析程序的功能输入:源程序字符串输出:二元组(种别,单词本身)词法分析程序#include#includecharprog[800],token[20];//程序段,单词符号charch;intsyn,p,m,n,sum;//单词符号类型syn,整数sum,当前要识别
6、程序段第一个字符指针pchar*rwtab[6]={"begin","if","then","while","do","end"};main(){p=0;printf("请输入源程序段");do{ch=getchar();prog[p++]=ch;}while(ch!='#');p=0;do{scaner();//读取一个单词符号,类型syn,单词token或sumswitch(syn){case11:printf("(%d,%d)",syn,sum);break;case-1:printf("(%s,出错!)",token
7、);break;default:printf("(%d,%s)",syn,token);}}while(syn!=0);system("pause");}scaner(){for(n=0;n<20;n++)token[n]=NULL;m=0;sum=0;ch=prog[p++];while(ch==''){ch=prog[p++];}if(ch>='a'&&ch<='z')//标识符{while(ch>='a'&&ch<='z'
8、
9、ch>='0'&&ch<='9'){token[m++]=ch;ch=prog[p++];}syn=1
10、0;p--;for(n=0;n<6;n++)////标识符是否关键词if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif(ch>='0'&&ch<='9')//整数{while(ch>='0'&&ch<='9'){sum=sum*10+(ch-'0');ch=prog[p++];}syn=11;p--;}elseswitch(ch){case'<':token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;token[m++]=ch;}//<>el
11、seif(ch=='='){syn=22;token[m++]=ch;}//<=else{syn=20;p--;}//':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}//>=else{syn=23;p--;}//>break;case':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=ch;}//:=else{syn=17;p--;}//:break
12、;case'+':syn=13;token[0]=ch;break;case'-':syn=14;token[0]=ch;break;case'*':syn=15;token[0]=ch;break;cas