词法分析器源码
来源:互联网 发布:广州龙族网络 编辑:程序博客网 时间:2024/05/18 16:13
#include<iostream>
#include<fstream>
#include <string>
using namespace std;
char WORD[5][10]={"int","char","float","for","return"};//关键字
char OPRATOR[11]={'+','-','*','/','<','>','=','(',')','{','}'}; //关键字
string Line[100];
int Line_Num=0;
bool isWORD(char chr[])//关键字判定
{
bool flag=false;
for(int i=0;i<5;i++)
{
if(strcmp(WORD[i],chr)==0)
{
flag=true;
break;
}
}
return flag;
}
bool isOPRATOR(char ch)//运算符判定
{
bool flag=false;
for(int i=0;i<11;i++)
{
if(OPRATOR[i]==ch)
{
flag=true;
break;
}
}
return flag;
}
int main()
{
ifstream input("1.txt",ios::in);//源文件
if(!input)
{
cerr<<"open error!"<<endl;
exit(1);
}else{
cout<<"源程序如下:"<<endl;
while(getline(input,Line[Line_Num]))//读取一行
{
cout<<Line[Line_Num]<<endl;
Line_Num++;
}
cout<<endl<<"词法分析结果如下:"<<endl;
}
for(int i=0;i<Line_Num;i++){
for(int j=0;j<Line[i].length(); j++){
while(Line[i][j]==' '){
j++;
}
char ch=Line[i][j];
if(ch>='A' && ch<='z')//如果是字符
{
int k=0;
char A[10];
while(ch>='A' && ch<='z' || ch>='0' && ch<='9')
{
if(k<10)
{
A[k]=ch;
k++;
}
A[k]='\0';
j++;
ch=Line[i][j];
}
if(isWORD(A)==true){
cout<<"关键字"<<A<<endl;
}else{
cout<<"标识符"<<A<<endl;
}
if(k<10 && isOPRATOR(ch)){
cout<<"运算符"<<ch<<endl;
}
}else{
if(ch>='0' && ch<='9')//如果是是数字
{
int k=0;
char NUM[10];
while(ch>='0' && ch<='9')
{
if(k<10)
{
NUM[k]=ch;
k++;
}
if(Line[i][j]==' '){
}
NUM[k]='\0';
j++;
ch=Line[i][j];
}
cout<<"数字串"<<NUM<<endl;
if(k<10 && isOPRATOR(ch)){
cout<<"运算符"<<ch<<endl;
}
}else
{
if(isOPRATOR(ch)){
cout<<"运算符"<<ch<<endl;
}else{
//cout<<"未识别"<<ch<<endl;
}
}
}
}
}
input.close();
return 0;
#include<fstream>
#include <string>
using namespace std;
char WORD[5][10]={"int","char","float","for","return"};//关键字
char OPRATOR[11]={'+','-','*','/','<','>','=','(',')','{','}'}; //关键字
string Line[100];
int Line_Num=0;
bool isWORD(char chr[])//关键字判定
{
bool flag=false;
for(int i=0;i<5;i++)
{
if(strcmp(WORD[i],chr)==0)
{
flag=true;
break;
}
}
return flag;
}
bool isOPRATOR(char ch)//运算符判定
{
bool flag=false;
for(int i=0;i<11;i++)
{
if(OPRATOR[i]==ch)
{
flag=true;
break;
}
}
return flag;
}
int main()
{
ifstream input("1.txt",ios::in);//源文件
if(!input)
{
cerr<<"open error!"<<endl;
exit(1);
}else{
cout<<"源程序如下:"<<endl;
while(getline(input,Line[Line_Num]))//读取一行
{
cout<<Line[Line_Num]<<endl;
Line_Num++;
}
cout<<endl<<"词法分析结果如下:"<<endl;
}
for(int i=0;i<Line_Num;i++){
for(int j=0;j<Line[i].length(); j++){
while(Line[i][j]==' '){
j++;
}
char ch=Line[i][j];
if(ch>='A' && ch<='z')//如果是字符
{
int k=0;
char A[10];
while(ch>='A' && ch<='z' || ch>='0' && ch<='9')
{
if(k<10)
{
A[k]=ch;
k++;
}
A[k]='\0';
j++;
ch=Line[i][j];
}
if(isWORD(A)==true){
cout<<"关键字"<<A<<endl;
}else{
cout<<"标识符"<<A<<endl;
}
if(k<10 && isOPRATOR(ch)){
cout<<"运算符"<<ch<<endl;
}
}else{
if(ch>='0' && ch<='9')//如果是是数字
{
int k=0;
char NUM[10];
while(ch>='0' && ch<='9')
{
if(k<10)
{
NUM[k]=ch;
k++;
}
if(Line[i][j]==' '){
}
NUM[k]='\0';
j++;
ch=Line[i][j];
}
cout<<"数字串"<<NUM<<endl;
if(k<10 && isOPRATOR(ch)){
cout<<"运算符"<<ch<<endl;
}
}else
{
if(isOPRATOR(ch)){
cout<<"运算符"<<ch<<endl;
}else{
//cout<<"未识别"<<ch<<endl;
}
}
}
}
}
input.close();
return 0;
}
运行结果:
源文件根目录下建立1.txt文件
执行结果:
- 词法分析器源码
- 一个词法分析器源码的剖析
- Hive源码解析之词法分析器parser
- C语言版 计算器-词法分析器-源码分析
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 词法分析器
- 字符串匹配的KMP算法
- IIS 6.0/7.0/7.5、Nginx、Apache 等 Web Service 解析漏洞总结
- x86 IO端口见解
- HDU2072:单词数
- 英语感受 5月份--英语思维
- 词法分析器源码
- 优先队列+prim(待完善)
- java CopyOnWriteArrayList的使用
- 关于使用API创建Rebar不能成功的问题
- solr中文分词
- gdb调试工具
- 扩展欧几里德算法求解线性同余方程
- Firefox OS 模拟器 1.0 发布
- 对单元测试的一点感悟——这是一把双刃剑