📄 junjing1.cpp
字号:
#include<fstream>
#include<process.h>
#include<stdio.h>
#include<string.h>
using namespace std;
//# define MAX 50;
const int max=50;
int main(){
char arr[50];//数组存放单词符号。
char current ;//存放当前字符。
int i=0;//arr数组的一个指针
int ch;//?
ifstream input_file;ofstream output_file;
input_file.open("infile.txt",ios::binary);
if(!input_file){
output_file<<"can not open file."<<endl;
exit(0);
}
//input_file.close();
output_file.open("outfile0.txt",ios::binary);
if(!output_file){
output_file<<"can not open outfile0."<<endl;
exit(1);
}
//output_file.close();
input_file.get(current);//得到源程序的第一个字符存在current,下面分析
//current是字母(那么就可能是关键字和标识符)是数字(那么就可能是常数)
//是”算术运算符”还有可能是”标点符号 “ 要分清情况讨论情况。
while(current==' ')input_file.get(current);//确保取得得一个绝对不是空字符
while(current!='@')//没有到达源程序的结尾。
{
if((current>='a'&¤t<='z')||
(current>='A'&¤t<='Z')||
(current>='0'&¤t<='9')||
(current=='('||current==')')||
(current=='['||current==']')||
(current=='{'||current=='}')||
(current=='<'||current=='>')||
(current=='='||current=='!')||
(current=='-'||current=='+')||
(current=='*'||current=='/')||
(current=='&'||current=='\n')||//换行的无法实现
(current==';'||current==':')||
current==' '){
//下面就是讨论关键字和标识符的情况。首字符是字母。
if((current>='a'&¤t<='z')||(current>='A'&¤t<='Z'))
{
i=0;
while((current>='a'&¤t<='z')||(current>='0'&¤t<='9')||
(current>='A'&¤t<='Z'))
{
arr[i++]=current;input_file.get(current);//get(ch)即input_file.get(current)。为了简写起见.
}
arr[i++]='\0';//逐一取得字符串并存在arr〔〕数组中,而且
//因为最终要输出来的,所以在其最后添上'\0',成为了字符串。
//关键字为if,else,while,do,其它的都是普通的标识符。
if(strcmp("if",arr)==0)output_file<<"(0,"<<arr<<")"<<endl;//out即output_file
else if(strcmp(arr,"else")==0) output_file<<"(1,"<<arr<<")"<<endl;
else if(strcmp(arr,"while")==0) output_file<<"(2,"<<arr<<")"<<endl;
else if(strcmp(arr,"do")==0) output_file<<"(3"<<arr<<")"<<endl;
else output_file<<"(14,"<<arr<<")"<<'\n';
}//常数的讨论
while(current==' ')input_file.get(current);
if(current>='0'&¤t<='9')
{
i=0;
arr[i++]=current;input_file.get(current);
while(current>='0'&¤t<='9')
{
arr[i++]=current;input_file.get(current);
}
if(current=='.'){
arr[i++]=current;input_file.get(current);
while(current>='0'&¤t<='9'){
arr[i++]=current;input_file.get(current);
}
arr[i++]='\0';
output_file<<"(15,"<<arr<<")"<<endl;
}
else {arr[i++]='\0';output_file<<"(15,"<<arr<<")"<<endl; }
}
//其它符号的讨论,算术运算符;{}()+-*/〔〕
//其它符号的讨论,算术运算符;{}()+-*/〔〕
while(current==' ')input_file.get(current);
if(current==';'){ i=0;output_file<<"(4,"<<";"<<")"<<endl;
//时不时要arr[0]改成arr[0][0]?////////////////////////
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='{'){ i=0; output_file<<"(5,"<<"{"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='}'){ i=0; output_file<<"(6,"<<"}"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='('){ i=0; output_file<<"(7,"<<"("<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current==')'){ i=0; output_file<<"(8,"<<")"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='+'){ i=0; output_file<<"(9,"<<"+"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='-'){ i=0; output_file<<"(10,"<<"-"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='*'){ i=0; output_file<<"(11,"<<"*"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='/'){ i=0; output_file<<"(12,"<<"/"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current=='['){ i=0; output_file<<"(20,"<<"["<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
if(current==']'){ i=0; output_file<<"(21,"<<"]"<<")"<<endl;
input_file.get(current);}
while(current==' ')input_file.get(current);
//特殊的会产生歧义的符号: = > < !
if(current==':')
{
i=0;
arr[i++]=current;input_file.get(current);
if(current==':')
{
arr[i++]=current;arr[i++]='\0';output_file<<"(18,"<<arr<<")"<<endl;
}
else { arr[i++]='\0';output_file<<"(16,"<<arr<<")"<<endl;}
input_file.get(current);//get.(ch);//到底要不要加上啊????????
}
while(current==' ')input_file.get(current);
if(current=='=')
{
i=0;
arr[i++]=current;input_file.get(current);
if(current=='=')
{
arr[i++]=current;arr[i++]='\0';output_file<<"(13,"<<arr<<")"<<endl;
}
else { arr[i++]='\0';output_file<<"(17,"<<arr<<")"<<endl;}
input_file.get(current);//get.(ch);//到底要不要加上啊????????
}
while(current==' ')input_file.get(current);
if(current=='>')
{
i=0;
arr[i++]=current;input_file.get(current);
if(current=='=')
{
arr[i++]=current;arr[i++]='\0';output_file<<"(13,"<<arr<<")"<<endl;
}
else { arr[i++]='\0';output_file<<"(13,"<<arr<<")"<<endl;}
input_file.get(current);//get.(ch);//到底要不要加上啊????????
}
while(current==' ')input_file.get(current);
if(current=='<')
{
i=0;
arr[i++]=current;input_file.get(current);
if(current=='=')
{
arr[i++]=current;arr[i++]='\0';output_file<<"(13,"<<arr<<")"<<endl;
}
else { arr[i++]='\0';output_file<<"(13,"<<arr<<")"<<endl;}
input_file.get(current);//get.(ch);//到底要不要加上啊????????
}
while(current==' ')input_file.get(current);
if(current=='!')
{
i=0;
arr[i++]=current;input_file.get(current);
if(current=='=')
{
arr[i++]=current;arr[i++]='\0';output_file<<"(13,"<<arr<<")"<<endl;
}
//else { arr[i++]='\0';output_file<<"(13,"<<arr<<")"<<endl;}
input_file.get(current);//get.(ch);//到底要不要加上啊????????
}
//特殊符号‘ ’ '\n' &
while(current==' ')input_file.get(current);
if(current=='&')
{
i=0;
arr[i++]=current;arr[i++]='\0';
output_file<<"(19,"<<arr<<")"<<endl;
input_file.get(current);//get.(ch);//到底要不要加上啊????????
}
while(current==' ')input_file.get(current);
while(current=='\n')
{
input_file.get(current);
output_file<<" 换行"<<endl;//到底要不要加上啊????????
}
while(current==' ')input_file.get(current);
}
else { output_file<<"error "<<current<<endl; input_file.get(current);}
}
input_file.close();
output_file.close();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -