zoukankan      html  css  js  c++  java
  • 词法分析器源码

    #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;

    }



    运行结果:



  • 相关阅读:
    EditPlus删除空行、空段落的正则表达式
    composer 2 install 或 update时报错解决
    001-接入腾讯云物联网通信
    004-STM32+ESP8266+AIR202基本控制篇-功能测试-Android扫码绑定Air202(GPRS)并通过阿里云物联网平台实现通信控制
    STM32+ESP8266+AIR202基本控制篇-315-功能测试-Air202(GPRS)以SSL单向认证方式连接MQTT服务器(不校验服务器证书)
    003-STM32+ESP8266+AIR202基本控制方案-功能测试-Android使用SmartConfig配网绑定ESP8266并通过阿里云物联网平台和ESP8266实现通信控制
    002-STM32+ESP8266+AIR202基本控制方案-关于阿里云物联网平台上的自定义,物模型,基础通信Topic使用说明
    002-STM32+ESP8266+AIR202基本控制方案-功能测试-Android使用APUConfig配网绑定ESP8266并通过阿里云物联网平台和ESP8266实现通信控制
    4.1-Air302(NB-IOT)-自建MQTT服务器-购买云服务器安装MQTT服务器软件(Linux系统)
    4.1-Air302(NB-IOT)-自建MQTT服务器-购买云服务器安装MQTT服务器软件(Windows系统)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3061839.html
Copyright © 2011-2022 走看看