资源简介
编译原理C语言实现词法分析程序带容错处理
代码片段和文件信息
#include
#include
#include
#define _KEY_WORD_END “waiting for your expanding“
typedef struct
{
int typenum;
char * word;
}WORD;
char input[255];
char token[255]=““;
int p_input;
int p_token;
char ch;
char * rwtab[]={“begin““if““then““while““do““end““_KEY_WORD_END“};
WORD* scaner();
int main()
{
aaa:
fflush(stdin);
int over=1;
WORD* oneword=new WORD;
printf(“Enter Your words(end with # ):“);
scanf(“%[^#]s“input);
p_input=0;
printf(“Your words:\n%s\n“input);
while(over<1000&&over!=-1)
{
oneword=scaner();
if(oneword->typenum<1000)
printf(“(%d%s)“oneword->typenumoneword->word);
over=oneword->typenum;
}
printf(“\n if you want out press any key to exit or press N go no :“);
fflush(stdin);
char abc=getchar();
if (abc==‘N‘)
goto aaa;
}
char m_getch()
{
ch=input[p_input];
p_input=p_input+1;
return (ch);
}
void getbc()
{
while(ch==‘ ‘||ch==10)
{
ch=input[p_input];
p_input=p_input+1;
}
}
void concat()
{
token[p_token]=ch;
p_token=p_token+1;
token[p_token]=‘\0‘;
}
int letter()
{
if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘)return 1;
else return 0;
}
int digit()
{
if(ch>=‘0‘&&ch<=‘9‘)return 1;
else return 0;
}
int reserve()
{
int i=0;
while(i<6&&(strcmp(rwtab[i]_KEY_WORD_END)))
{if(i<6&&(!strcmp(rwtab[i]token)))
return i+1;
i=i+1;
}
return 10;
}
void retract()
{
p_input=p_input-1;
}
char* dtb()
{
return NULL;
}
WORD* scaner()
{
WORD* myword=new WORD;
myword->typenum=10;
myword->word=““;
p_token=0;
m_getch();
getbc();
if(letter())
{
while(letter()||digit())
{
concat();
m_getch();
}
retract();
myword->typenum=reserve();
myword->word=token;
return (myword);
}
else if (digit()){
while(digit()){
concat();
m_getch();
}
retract();
myword->typenum=20;
myword->word=token;
return(myword);
}
else switch(ch)
{
case‘=‘: m_getch();
if(ch==‘=‘)
{
myword->typenum=39;
myword->word=“==“;
return (myword);
}
retract();
myword->typenum=21;
myword->word=“=“;
return (myword);
break;
case ‘+‘: myword->typenum=22;
myword->word=“+“;
return (myword);
break;
case ‘-‘: myword->typenum=23;
myword->word=“-“;
return (myword);
break;
case ‘*‘: myword->typenum=24;
myword->word=“*“;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5848 2013-10-10 22:09 cifa.cpp
文件 49117 2013-10-10 22:09 cifa.exe
- 上一篇:pl0_name
table.zip - 下一篇:VC++2012(VC++最新版!)
相关资源
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论