资源简介
编译原理 词法分析器实验代码 从文件读入
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个文件信息
- 上一篇:基本工作能力测试题册和答案
- 下一篇:几大主流开源飞控平台优劣比较
相关资源
- 编译原理将简单程序翻译成四元式
- 《编译原理》实验 识别无符号数的词
- 编译原理语法分析器实验报告.doc版
- 在语法分析器的基础上构造的三地址
- 北方工业大学语法分析器 (1)完整实
- 编译原理实验词法,语法,语义
- 编译原理语法分析实验代码
- 编译原理三上机实验报告
- 预测分析表构造算法的程序实现
- C_minus语言词法分析器
- 华中科技大学编译原理实验报告
- 编译原理课程设计词法分析程序
- 山东大学编译原理
- 基于预测分析表法的语法分析程序
- 编译原理中间代码生成
- windows下的bison.exe和flex.exe
- 编译原理lex和yacc
- 编译原理词法分析+SLR语法分析+SLR语义
- 文件读入 画变形监测曲线
- 编译原理PL/0 语言编译器分析实验报告
- 编译原理词法分析器语法分析器实验
- 编译原理课程设计SLR(1)/SLR1分析器
- 语法分析的源代码文件与相关文件
- 自顶向下预测分析语法分析程序
- 编译原理实验_赋值语句的翻译程序设
- 编译原理课程设计之编译器完整代码
- 编译原理实验 中间代码生成
- 编译原理第三版
- 编译原理课程设计-LL(1)预测分析法
- 编译原理——简单的四则运算
评论
共有 条评论