⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 junjing1.cpp

📁 有点不完美
💻 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'&&current<='z')||
    (current>='A'&&current<='Z')||
    (current>='0'&&current<='9')||
    (current=='('||current==')')||
    (current=='['||current==']')||
    (current=='{'||current=='}')||
    (current=='<'||current=='>')||
    (current=='='||current=='!')||
    (current=='-'||current=='+')||
    (current=='*'||current=='/')||
    (current=='&'||current=='\n')||//换行的无法实现 
    (current==';'||current==':')||
    current==' '){
        //下面就是讨论关键字和标识符的情况。首字符是字母。 
        if((current>='a'&&current<='z')||(current>='A'&&current<='Z'))
        {
            i=0;
            while((current>='a'&&current<='z')||(current>='0'&&current<='9')||
            (current>='A'&&current<='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'&&current<='9')
        {
            i=0;
            arr[i++]=current;input_file.get(current);
            while(current>='0'&&current<='9')
            {
                arr[i++]=current;input_file.get(current);
            }
            if(current=='.'){
                arr[i++]=current;input_file.get(current);
                while(current>='0'&&current<='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 + -