博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
词法分析程序
阅读量:7120 次
发布时间:2019-06-28

本文共 4620 字,大约阅读时间需要 15 分钟。

1.词法分析程序的功能

I:对字符串表示的源程序

P:根据词法规则从左到右进行扫描和分解

O:识别出一个一个具有独立意义的单词符号以供语法分析之用

E:发现语法错误,则返回出错信息

2.符号与种别码的对照表

3.词法规则

4.代码与运行结果截图

#include
#include
void scaner();main(){ int p=0,row=1; char prog[80],token[8],ch; int syn,m,n,sum; char *rwtab[6]={
"begin","if","then","while","do","end"}; printf("词法分析\n"); printf("请输入一段程序(以#结束):"); do{ scanf("%c",&ch); prog[p++]=ch; }while(ch!='#'); printf("词法分析结果如下:"); do{ scaner(ch,prog,token); switch(syn) { case 11: printf("( %-10d%5d )\n",sum,syn); break; case -1: printf("you have input a wrong string\n"); return 0; break; default: printf("( %-10s%5d )\n",token,syn); break; } }while(syn!=0); }void scaner(char ch, char prog[80],char token[8],) { int sum=0; for(m=0;m<8;m++) token[m++]= NULL; ch=prog[p++]; m=0; while((ch==' ')||(ch=='\n')) ch=prog[p++]; if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))) { while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) { token[m++]=ch; ch=prog[p++]; } p--; syn=10; for(n=0;n<6;n++) if(strcmp(token,rwtab[n])==0) { syn=n+1; break; } } else if((ch>='0')&&(ch<='9')) { while((ch>='0')&&(ch<='9')) { sum=sum*10+ch-'0'; ch=prog[p++]; } p--; syn=11; } else { switch(ch) { case '<': token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=22; token[m++]=ch; } else { syn=20; p--; } break; case '>': token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=24; token[m++]=ch; } else { syn=23; p--; } break; case '+': token[m++]=ch; ch=prog[p++]; if(ch=='+') { syn=17; token[m++]=ch; } else { syn=13; p--; } break; case '-': token[m++]=ch; ch=prog[p++]; if(ch=='-') { syn=29; token[m++]=ch; } else { syn=14; p--; } break; case '!': ch=prog[p++]; if(ch=='=') { syn=21; token[m++]=ch; } else { syn=31; p--; } break; case '=': token[m++]=ch; ch=prog[p++]; if(ch=='=') { syn=25; token[m++]=ch; } else { syn=18; p--; } break; case '*': syn=15; token[m++]=ch; break; case '/': syn=16; token[m++]=ch; break; case '(': syn=27; token[m++]=ch; break; case ')': syn=28; token[m++]=ch; break; case '{
': syn=5; token[m++]=ch; break; case '}': syn=6; token[m++]=ch; break; case ';': syn=26; token[m++]=ch; break; case '\"': syn=30; token[m++]=ch; break; case '#': syn=0; token[m++]=ch; break; case ':': syn=17; token[m++]=ch; break; default: syn=-1; break; } } token[m++]='\0'; }

 

转载于:https://www.cnblogs.com/swxvico/p/5923832.html

你可能感兴趣的文章
struts2 helloworld
查看>>
http://www.ibm.com/developerworks/cn/java/j-lo-hotswapcls/
查看>>
王垠:对博士学位说永别
查看>>
本来连学计算机的都不是,怎么却读了计算机研究生
查看>>
LeetCode-326. Power of Three
查看>>
HDU 5305 Friends dfs
查看>>
【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
查看>>
Windows Azure 入门系列课程Windows Azure 入门系列课程
查看>>
VK Cup 2016 - Round 1 (Div. 2 Edition) A. Bear and Reverse Radewoosh 水题
查看>>
成都Uber优步司机奖励政策(3月31日)
查看>>
jquery通过ajax方法获取json数据不执行success
查看>>
字符数组转换成数字
查看>>
URL,URLConnection,HttPURLConnection的使用
查看>>
PHP对象和接口抽象类注意事项
查看>>
转: android apk 防止反编译技术(1~5连载)
查看>>
[唐诗]古风(其三十一)-李白
查看>>
触发器创建删除等操作
查看>>
Java版 数字金额大写转换
查看>>
Linux性能及调优指南(翻译)
查看>>
C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集...
查看>>