201406114257 张俊毅 词法分析 修改完
2015-09-24 16:01
393 查看
#include<stdio.h>
find(char a[],int i);
find2(char a[],int i);
find3(char a[],int i);
main()
{
int i=0;
char a[100];
gets(a);
while (a[i]!='#'&&i<=100)
{
if (a[i]=='b'||a[i]=='i'||a[i]=='t'||a[i]=='w'||a[i]=='d'||a[i]=='e')
{
i=find(a,i);
i++;
}
else
{
i=find3(a,i);
i++;
}
if (a[i]==' ')
{
i++;
}
}
printf("\n");
}
find(char a[],int i)//仅限于 b i t e w开头的字母
{
switch (a[i])
{
case 'b':
if (a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')
{
printf("(begin,1)");
i=i+4;return i;
}
else
{i=find2(a,i);
return i;
}
case 'i':
if (a[i+1]=='f')
{
printf("(if,2)");
i=i+1;
return i;
}
else
{i=find2(a,i);
return i;
}
case 't':
if (a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n')
{
printf("(then,3)");
i=i+3;
return i;
}
else
{i=find2(a,i);
return i;
}
case 'w':
if (a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e')
{
printf("(while,4)");
i=i+4;
return i;
}
else
{i=find2(a,i);
return i;
}
case 'd':
if (a[i+1]=='o')
{
printf("(do,5)");
i=i+1;
return i;
}
else
{i=find2(a,i);
return i;
}
case 'e':
if (a[i+1]=='n'&&a[i+2]=='d')
{
printf("(end,6)");
i=i+2;
return i;
}
else
{i=find2(a,i);
return i;
}
default:
return i;
}
}
find2(char a[],int i)
{
if (a[i]!=' ')
printf("(");
for (i;a[i]!=' ';i++)
{
printf("%c",a[i]);
}
if (a[i]==' ')
printf(",10)");
return i;
}
find3(char a[],int i)
{
switch(a[i])
{
case '+':
printf("(+,13)");
return i;
case '-':
printf("(-,14)");
return i;
case '*':
printf("(*,15)");
return i;
case '/':
printf("(/,16)");
return i;
case ':':
if (a[i+1]=='=')
{
printf("(:=,18)");
i++;
}
else
{
printf("(:,17)");
}
return i;
case '<':
if (a[i+1]=='=')
{
printf("(<=,21)");i++;
}
else if(a[i+1]=='>')
{
printf("(<>,22)");
i++;
}
else
{
printf("(<,20)");
}
return i;
case '>':
if (a[i+1]=='=')
{
printf("(>=,24)");i++;
}
else
{
printf("(>,23)");
}
return i;
case '=':
printf("(=,25)");
return i;
case ';':
printf("(;,26)");
return i;
case '(':
printf("((,27)");
return i;
case ')':
printf("(),28)");
return i;
case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':case '0':
printf("(");
while(i<100)
{
if (a[i]<='9'&&a[i]>='0')
{
printf("%c",a[i]);
i++;
}
else
{
i--;
printf(",11)");
return i;
}
}
default:
break;
}
i=find2(a,i);
return i;
}
相关文章推荐
- PowerDesigner表结构和字段大小写转换
- 测转型到测试开发
- 应用系统Url交互之数据加密
- Memcached源码解析--多线程网络模型
- JavaSE实战——网络编程
- 利用数据库自定义并发 bunket 功能
- v9 的发布文章前预览功能
- Java中基本数据类型和引用数据类型
- 求公共前缀长度与所选字符串个数的乘积的最大值 Trie树求最值 UVA 11488 Hyper Prefix Sets
- iOS 拍照获取照片 翻转90度的问题
- .net3.5后新增的 BeginInvoke EndInvoke 异步操作
- 【九度OJ】题目1204:农夫、羊、菜和狼的故事 -----------状态压缩+搜索
- hdu4746 Mophues
- 个人前博客地址
- ADC 驱动分析
- android4.4以上系统Uri错误的解决方法
- android4.4以上系统Uri错误的解决方法
- SSRF的一些总结
- 纯 AS3 将图片转换为 SWF(转自同行“古树悬叶”的博客)
- [LeetCode]Remove Duplicates from Sorted Array