#include<fstream.h>
#include<iostream.h>
#include<string.h>
char *word[36]={"","and","array","begin","bool","call","case",
"char","constant","dim","do","else","end","false","for","if","input",
"integer","not","of","or","output", "procedure","program","read",
"real","repeat","set","stop","then","to","true","until","var","while","write"};
int a[10000],b[10000];
char copy[1000][1000];
char achar[1000000];
int line=1,biaoji1=1,num=1,abnum=1,charnum=1;
void scan();
void zifuchuan();
void number();
void zhuxi();
void fuhao();
void zifuchangliang();
void inputfile();
void output();
bool wrong=false;
void fuhao()
{
if(achar[num]=='.'&&achar[num+1]=='.')
{
a[abnum]=47;
b[abnum]=0;
abnum++;
num+=2;
}
else if(achar[num]==':'&&achar[num+1]=='=')
{
a[abnum]=51;
b[abnum]=0;
abnum++;
num+=2;
}
else if(achar[num]=='<'&&achar[num+1]=='=')
{
a[abnum]=54;
b[abnum]=0;
abnum++;
num+=2;
}
else if(achar[num]=='<'&&achar[num+1]=='>')
{
a[abnum]=55;
b[abnum]=0;
abnum++;
num+=2;
}
else if(achar[num]=='>'&&achar[num+1]=='=')
{
a[abnum]=58;
b[abnum]=0;
abnum++;
num+=2;
}
else if(achar[num]=='(')
{
a[abnum]=39;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]==')')
{
a[abnum]=40;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='*')
{
a[abnum]=41;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='+')
{
a[abnum]=43;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]==',')
{
a[abnum]=44;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='-')
{
a[abnum]=45;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='.')
{
a[abnum]=46;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='/')
{
a[abnum]=48;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]==':')
{
a[abnum]=50;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]==';')
{
a[abnum]=52;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='<')
{
a[abnum]=53;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='=')
{
a[abnum]=56;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='>')
{
a[abnum]=57;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]=='[')
{
a[abnum]=59;
b[abnum]=0;
abnum++;
num++;
}
else if(achar[num]==']')
{
a[abnum]=60;
b[abnum]=0;
abnum++;
num++;
}
else
{
wrong=true;
cout<<"Line "<<line<<":"<<"出现非法符号!"<<endl;
num++;
}
if(num<charnum)
scan();
}
void inputfile()
{
char n[300],ch;
cin>>n;
ifstream infile(n);
while(infile.get(ch))
achar[charnum++]=ch;
}
void number()
{
char store[1000];
store[0]=achar[num];
num++;
int i=0;
bool isnumber=true;
while((achar[num]>='a'&&achar[num]<='z')||(achar[num]>='A'&&achar[num]<='Z')||(achar[num]>='0'&&achar[num]<='9'))
{
store[++i]=achar[num];
if(achar[num]<'0'||achar[num]>'9')
isnumber=false;
num++;
}
int l1=i+1;
if(isnumber)
a[abnum]=37;
else
{
wrong=true;
cout<<"Line "<<line<<":"<<"出现非法字符集!"<<endl;
}
store[l1]='\0';
for(i=1;i<biaoji1;i++)
{
int j=strcmp(copy[i],store);
if(strcmp(copy[i],store)==0)
{
b[abnum]=i;
abnum++;
break;
}
}
if(i==biaoji1)
{
b[abnum]=biaoji1;
strcpy(copy[biaoji1],store);
biaoji1++;
abnum++;
}
if(num<charnum)
{
if(achar[num]==' ')scan();
else if(achar[num]=='\n')scan();
else if(achar[num]=='/'&&achar[num+1]=='*')num+=2,zhuxi();
else if(achar[num]=='\'')zifuchangliang();
else fuhao();
}
}
void output()
{
if(!wrong)
{
int i;
for(i=1;i<abnum;i++)
{
cout<<"("<<a[i]<<",";
if(b[i])
cout<<b[i];
else cout<<"-";
cout<<") ";
if(i%5==0)
cout<<endl;
}
cout<<endl;
}
}
void scan()
{
while(num<charnum)
{
if((achar[num]>='a'&&achar[num]<='z')||(achar[num]>='A'&&achar[num]<='Z'))
zifuchuan();
else if(achar[num]>='0'&&achar[num]<='9')
number();
else if(achar[num]=='/')
{
if(achar[num+1]=='*')
num+=2,zhuxi();
else fuhao();
}
else if(achar[num]=='\n')
line++,num++;
else if(achar[num]==' ')
num++;
else if(achar[num]=='\'')
zifuchangliang();
else
fuhao();
}
}
void zhuxi()
{
while(achar[num]!='*'||achar[num+1]!='/')
{
if(achar[num]=='\n'||num>=charnum)
{
wrong=true;
cout<<"Line "<<line<<":"<<"缺少右边符号'*/'!"<<endl;
line++;
num++;
break;
}
num++;
}
if(achar[num]=='*'||achar[num+1]=='/')
num+=2;
if(num<charnum)
scan();
}
void zifuchuan()
{
char store[1000];
store[0]=achar[num];
num++;
int i=1;
while((achar[num]>='a'&&achar[num]<='z')||(achar[num]>='A'&&achar[num]<='Z')||(achar[num]>='0'&&achar[num]<='9'))
store[i++]=achar[num++];
int l1=i;
store[l1]='\0';
for(i=1;i<=35;i++)
{
if(strcmp(word[i],store)==0)
{
a[abnum]=i;
b[abnum]=0;
abnum++;
break;
}
}
if(i==36)
{
for(i=1;i<biaoji1;i++)
{
if(strcmp(copy[i],store)==0)
{
a[abnum]=36;
b[abnum]=i;
abnum++;
break;
}
}
if(i==biaoji1)
{
a[abnum]=36;
b[abnum]=biaoji1;
abnum++;
strcpy(copy[biaoji1],store);
biaoji1++;
}
}
if(num<charnum)
{
if(achar[num]==' ')scan();
else if(achar[num]=='\n')scan();
else if(achar[num]=='/'&&achar[num+1]=='*')num=+2,zhuxi();
else if(achar[num]=='\'')zifuchangliang();
else fuhao();
}
}
void zifuchangliang()
{
char store[1000];
store[0]=achar[num];
int i=0;
num++;
while(achar[num]!='\'')
{
if(achar[num]=='\n'||num>=charnum)
{
wrong=true;
cout<<"Line "<<line<<":"<<"缺少右边单引号!"<<endl;
line++;
break;
}
store[++i]=achar[num];
num++;
}
int l1=i+1;
store[l1]='\0';
num++;
for(i=1;i<biaoji1;i++)
{
if(strcmp(copy[i],store)==0)
{
a[abnum]=38;
b[abnum]=i;
abnum++;
break;
}
}
if(i==biaoji1)
{
a[abnum]=38;
b[abnum]=biaoji1;
abnum++;
strcpy(copy[biaoji1],store);
biaoji1++;
}
if(num<charnum)
{
if(achar[num]==' ')scan();
else if((achar[num]>='a'&&achar[num]<='z')||(achar[num]>='A'&&achar[num]<='Z'))zifuchuan();
else if(achar[num]>='0'&&achar[num]<='9')number();
else if(achar[num]=='\n')scan();
else if(achar[num]=='/'&&achar[num+1]=='*')num=+2,zhuxi();
else if(achar[num]=='\'')zifuchangliang();
else fuhao();
}
}
int main()
{
cout<<endl<<endl<<endl;
cout<<"杨超"<<endl;
cout<<"200930583011"<<endl;
cout<<"计科2"<<endl;
cout<<endl<<endl;
cout<<"输入文件路径:";
inputfile();
scan();
output();
return 0;
}
SAMPLE 词法分析程序 C++版
4星 · 超过85%的资源 需积分: 10 76 浏览量
2011-12-09
10:14:54
上传
评论
收藏 282KB RAR 举报
yc476734929
- 粉丝: 0
- 资源: 1
最新资源
- Windows 常见运行运行库32+64
- 基于3KW光伏并网单相逆变器设计(TMS320F28035控制板+显示板+STM32F103功率板)硬件(原理图+PCB)工程
- 正点原子HAL库 STM32F4 外部中断(学习自用附源码)
- delphi rzcombobox DropDownList 灰色背景改为白色
- sap sd.docsap sd.doc
- torch-1.10.2-cp38-cp38-win-amd64.whl
- 菜单栏实现增加数据,修改数据,查询数据,删除数据
- 全国省市区三级联动json文件,带code
- C8_全局&局部&static.zip
- Unity和安卓交互插件Unity调Android Native Goodies PRO
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈