资源简介
编译原理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
- 上一篇:非递归预测分析;C++实现LL1文法分析
- 下一篇:自制c语言编译器
相关资源
- C语言的嵌入式汇编基本使用.docx(2页
- C语言嵌入式Modbus协议栈,支持主站和
- C语言封装的HttpClient接口
- C语言课设计算器
- C语言 学生兴趣管理系统
- c语言实现火车订票系统(控制台)源
- 模拟笔记本电脑(C语言实现)
- c语言实现竞技比赛打分系统
- KMP算法C语言程序
- Linux c语言 学生成绩管理系统
- 北邮-编译原理-词法分析
- 弹跳的小球(test.c)
- 林锐—高质量C编程
- 基于c语言的通讯录系统
- C语言全套课件与教学资料-哈工大
- 计算机二级C语言真题.docx
- C语言实现 设备信息管理系统
- GBT 28169-2011 嵌入式软件 C语言编码规范
- C语言标准库函数大全.chm
- C语言常用代码(分章节)
- c语言课程设计:客房登记系统源码
- C语言常用算法源代码
- 吕鑫:VS2015之博大精深的0基础C语言视
- c语言文都讲义2020
- c语言课件56883
- C语言推箱子win控制台
- C语言程序设计50例.docx
- 烟花优化算法(c语言版)
- C语言程序设计教材习题参考答案.do
- 数据结构(C语言版)ppt课件,清华,
评论
共有 条评论