资源简介
编译原理实验
词法分析器
c/c++语言编写

代码片段和文件信息
#include
#include
#define KWL 16
using namespace std;
struct zu
{
char word[20];
int no;
zu(char *pint n)
{
int i=0;
while(*p!=0)
word[i++]=*(p++);
word[i]=0;
no=n;
}
};
char buff[241]strToken[120]ID[100][120]Const[100][30];
int bp=0sp=0IDno=0;
char ch;
ifstream ifile;
ofstream oidfile;
zu keyword[]={
zu(“if“1)
zu(“else“2)
zu(“while“3)
zu(“return“4)
zu(“void“5)
zu(“int“6)
zu(“for“7)
zu(“char“8)
zu(“const“9)
zu(“do“10)
zu(“float“11)
zu(“long“12)
zu(“double“13)
zu(“struct“14)
zu(“enum“15)
zu(“include“16)
};
int GetChar()
{
if(bp==0||bp==120)
{
int i=0;
char t;
do
{
if(!ifile.eof())
{
ifile.read(&t1);
if(t==‘\n‘||t==‘\t‘||(buff[(bp+240+i-1)%240]==‘ ‘&&t==‘ ‘))
i--;
else
{
buff[bp+i]=t;
}
}
else
{
break;
}
i++;
}while(i<120);
if(ifile.eof())
{
buff[bp+i-1]=-1;
}
}
ch=buff[bp++];
bp=bp%240;
return 1;
}
void Concat()
{
strToken[sp++]=ch;
strToken[sp]=0;
}
void Retract()
{
bp=(bp-1+240)%240;
ch=‘ ‘;
}
void GetBC()
{
while(ch==‘ ‘)
GetChar();
}
bool IsLetter()
{
if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))
return true;
else
return false;
}
bool IsDigit()
{
if(ch>=‘0‘&&ch<=‘9‘)
return true;
else
return false;
}
int Reserve()
{
bool fd=false;
int ij;
for(i=0;i {
for(j=0;keyword[i].word[j]==strToken[j];j++)
{
if(keyword[i].word[j]==0)
{
if(strToken[j]==0)
return(keyword[i].no);
else
break;
}
}
}
return 0;
}
int InsertId()
{
oidfile< cout< IDno++;
return 0;
}
int InsertConst()
{
cout< return 0;
}
void word()
{
int codevalue;
sp=0;
GetChar();
GetBC();
if(IsLetter())
{
while(IsLetter())
{
Concat();
GetChar();
}
Retract();
code=Reserve();
if(code)
{
cout< }
else
{
InsertId();
}
}
else if(IsDigit())
{
while(IsDigit())
{
Concat();
GetChar();
}
Retract();
InsertConst();
}
else
{
switch (ch)
{
case ‘=‘:
GetChar();
if(ch!=‘=‘)
{
cout<<“=“< Retract();
}
else
{
cout<<“==“< }
break;
case ‘+‘:
GetChar();
if(ch!=‘+‘)
{
cout<<“+“< Retract();
}
else
{
cout<<“++“< }
break;
case ‘-‘:
GetChar();
if(ch!=‘-‘)
{
cout<<“-“< Retract();
}
else
{
cout<<“--“< }
break;
case ‘*‘:
cout<<“*“< break;
case ‘/‘:
cout<<“/“< break;
case ‘;‘:
cout<<“;“< break;
case ‘(‘:
cout<<“(“< break;
case ‘)‘:
cout<<“)“< break;
case ‘>‘:
GetChar();
if(ch!=‘=‘)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4260 2010-03-26 11:27 word\word.dsp
文件 531 2010-03-26 10:03 word\word.dsw
文件 50176 2010-04-02 11:21 word\word.ncb
文件 1312 2010-04-02 11:18 word\word.plg
目录 0 2010-04-02 09:58 word\Debug
文件 215 2010-04-02 10:57 word\1.CPP
文件 112 2010-04-02 11:18 word\idfile.txt
文件 3986 2010-04-02 11:18 word\word.cpp
文件 53760 2010-04-02 11:21 word\word.opt
目录 0 2010-04-02 09:58 word
----------- --------- ---------- ----- ----
114352 10
相关资源
- 国际象棋的qt源代码
- C语言开发实战宝典
- 小甲鱼C语言课件 源代码
- 算符优先语法分析器(C语言编写)
- c语言看发的网络协议 ,源代码
- C语言实现的DES对称加密算法
- 数据结构,迷宫问题C语言版源代码
- C语言 学生信息管理系统 源代码
- C语言版3D魔方游戏源代码
- 编译原理实验-词法分析(c语言代码)
- QT5开发及源代码
- USB CAN Tool 源代码(LabVIEW 2011环境)
- 超声波水表源代码
- 一个模糊PID温度控制算法源代码
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- TCP/IP客户端和服务器端源代码,好用
- 交互式计算机图形学 第六版 OpenGL源代
- 数据结构教程李春葆第五版书中例题
- 三次样条插值类源代码!
- diy写字机grbl v1.1源代码
- 北邮-编译原理-词法分析
- C语言常用算法源代码
- 关于LED制作的源代码合集(38套)
-
STM32-ba
se64加密源代码 - 51超声波避障源代码
- 一个C++实现的源代码行数统计工具
- ZZULIOJ部分答案C语言免费.7z
- 吉他调音软件源代码
- 连连看源代码C语言版
评论
共有 条评论