资源简介
编译原理 词法分析器实验代码 从文件读入
cbb.cpp文件

代码片段和文件信息
#include
#include
#include
#define _KEY_WORD_END “waiting for you 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();
//char str[] = “begin x:=9;if x>0then x:=2*x+1/3;end#“;
char str[] = “begin 8x:=9;if x>0then x:=2*x+1/3;end#“;
FILE *fp1*fp2;
void main(int argc char* argv[])
{
int over=1;
WORD* oneword=new WORD;
fp1 = fopen(“text.txt““w“);
if(fp1 == NULL){
printf(“can not open file: text.txt\n“);
exit(0);
}
fputs(strfp1);
fclose(fp1);
fp2 = fopen(“text.txt““rt“);
fgets(input43fp2);
p_input=0;
printf(“Your words:\n%s\n“input);
while(over<1000)
{
oneword=scaner();
if(oneword->typenum<1000 && oneword->typenum != -1 )
printf(“(%d%s)“oneword->typenumoneword->word);
else if(oneword->typenum<1000)
printf(“error“);
over=oneword->typenum;
}
printf(“\npress # to exit:“);
scanf(“%[^#]s“input);
}
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(strcmp(rwtab[i]_KEY_WORD_END))
{
if(!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();
/*myword->typenum=reserve();
if(myword->typenum != 10)
break;*/
m_getch();
}
retract();
myword->typenum=reserve();
myword->word=token;
return(myword);
}
else if(digit())
{
while(digit())
{
concat();
m_getch();
}
if(letter()){
myword->typenum=-1;
myword->word=“error“;
return (myword);
}
else{
retract();
myword->typenum=11;
myword->word=token;
return(myword);
}
}
else switch(ch)
{
case‘=‘:
myword->typenum=21;
myword->word=“==“;
return (myword);
break;
case‘+‘:myword->typenum=13;
myword->word=“+“;
return (myword);
break;
case‘-‘:myword->typenum=14;
myword->word=“-“;
return (myword);
break;
case‘*‘:myword->typenum=15;
myword->word=“*“;
return (myword);
break;
case‘/‘:myword->typenum=16;
myword->word=“/“;
return (myword);
break;
case‘(‘:myword->typenum=27;
myword->word=“
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
....... 930 2014-09-26 13:39 sbb\sbb.dsw
....... 50176 2014-09-26 13:39 sbb\sbb.ncb
....... 59904 2014-09-26 13:39 sbb\sbb.opt
文件 459776 2012-01-02 09:42 sbb\sbb1\Debug\sbb1.pdb
....... 1780 2014-09-26 13:39 sbb\sbb1\Debug\StdAfx.obj
文件 41984 2012-01-02 09:42 sbb\sbb1\Debug\vc60.idb
文件 53248 2012-01-02 09:42 sbb\sbb1\Debug\vc60.pdb
文件 3370 2014-09-28 09:10 sbb\sbb1\Debug\text.obj
文件 172080 2012-01-02 09:42 sbb\sbb1\Debug\sbb1.exe
文件 226020 2012-01-02 09:17 sbb\sbb1\Debug\sbb1.pch
文件 198552 2012-01-02 09:42 sbb\sbb1\Debug\sbb1.ilk
文件 16828 2012-01-02 09:42 sbb\sbb1\Debug\sbb1.obj
....... 1196 2014-09-26 13:39 sbb\sbb1\ReadMe.txt
文件 1104 2012-01-02 09:42 sbb\sbb1\sbb1.plg
....... 291 2014-09-26 13:39 sbb\sbb1\StdAfx.cpp
....... 769 2014-09-26 13:39 sbb\sbb1\StdAfx.h
文件 769 2014-09-28 08:07 sbb\sbb1\text\StdAfx.h
文件 291 2014-09-28 08:07 sbb\sbb1\text\StdAfx.cpp
文件 1196 2014-09-28 08:07 sbb\sbb1\text\ReadMe.txt
文件 4512 2014-09-28 08:07 sbb\sbb1\text\text.dsp
文件 531 2014-09-28 08:07 sbb\sbb1\text\text.dsw
文件 33792 2014-09-28 08:22 sbb\sbb1\text\text.ncb
文件 48640 2014-09-28 08:22 sbb\sbb1\text\text.opt
文件 119 2012-01-02 08:38 sbb\sbb1\text\text.cpp
文件 3575 2014-09-28 08:55 sbb\sbb1\word_scaner.cpp
文件 50176 2012-01-02 09:44 sbb\sbb1\sbb1.ncb
文件 330 2014-09-28 09:44 sbb\sbb1\sbb1.sln
..A..H. 7680 2014-09-28 09:44 sbb\sbb1\sbb1.suo
文件 38 2012-01-02 09:42 sbb\sbb1\text.txt
文件 4376 2012-01-02 09:44 sbb\sbb1\sbb1.cpp
............此处省略11个文件信息
- 上一篇:基本工作能力测试题册和答案
- 下一篇:几大主流开源飞控平台优劣比较
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译词法分析器识别关键字常数和符
- Delphi做的用于分析Pascal语言的词法分
- DICOM文件读取程序
- 编译原理LR(0)语法分析
- bmp文件读出为txt文件 txt文件写入为
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
评论
共有 条评论