词法分析程序设计

来源:互联网 发布:hc sr04 51单片机程序 编辑:程序博客网 时间:2024/04/29 03:21

一个自己写的小词法分析程序
`package shiyan;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

import javax.print.attribute.standard.PrinterLocation;

public class ShiYan_one {
public static void main(String[] args) throws IOException{
String[] strings=new String[29];
fuzhi(strings);//给关键字赋值;
/*
* 以下为获取输入
*/
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
String string=bufferedReader.readLine();
StringBuffer stringBuffer=new StringBuffer(string);
scanner(stringBuffer, 0, strings);

/* * scanner函数为处理输入,分析 */public static void scanner(StringBuffer stringBuffer,int index,String[] strings){    String string=String.valueOf(stringBuffer.charAt(index));    String string2="";    int i=index;    int flag=0;    String match="^[A-Za-z0-9]$";//正则表达式用以判断是否是数字或字母    String match1="^[0-9]*$";//判断是否为数字    int flag_havekongge=0;    do{        if(string.equals("#")){            return;        }        while(string.equals(" ")){//当检测到字符为空格时,读下一个            string=String.valueOf(stringBuffer.charAt(i));            flag_havekongge=1;            ++i;            if(i>=stringBuffer.length()){                break;            }        }        if(flag_havekongge==1){            --i;            flag_havekongge=0;        }        if(string.matches(match)){            string2=String.valueOf(stringBuffer.charAt(i));             if(i<stringBuffer.length()-1){                string=String.valueOf(stringBuffer.charAt(++i));            }else{                string2="";            }            while(string.matches(match)){                string2+=String.valueOf(stringBuffer.charAt(i));                ++i;                if(i>=stringBuffer.length()){                    break;                }                string=String.valueOf(stringBuffer.charAt(i));            }            for(int j=0;j<29;++j){                if(string2.equals(strings[j])){                    System.out.print("("+j+","+string2+") ");                    flag=1;                    break;                }                flag=0;            }                           if(flag==0){                if(string2.matches(match1)){                    System.out.print("(11"+","+string2+") ");                }else{                    System.out.print("(10"+",'"+string2+"') ");                }            }           }else{            if(!string.matches(match)){                string2="";                while(!string.matches(match)){                    if(string.equals("#")||string.equals(" ")){                        break;                    }                    string2+=string;                                            ++i;                        if(i>=stringBuffer.length()){                        break;                    }                    string=String.valueOf(stringBuffer.charAt(i));                }                for(int j=0;j<29;++j){                    if(string2.equals(strings[j])){                        System.out.print("("+j+","+string2+") ");                                                   break;                    }                                   }            }        }    }while (i<stringBuffer.length());   }public static void fuzhi(String[] strings){    strings[0]="#";    strings[1]="begin";    strings[2]="if";    strings[3]="then";    strings[4]="while";    strings[5]="do";    strings[6]="end";    for(int i=7;i<13;++i){        strings[i]=" ";    }    strings[13]="+";    strings[14]="-";    strings[15]="*";    strings[16]="/";    strings[17]=":";    strings[18]=":=";    strings[19]=" ";    strings[20]="<";    strings[21]="<>";    strings[22]="<=";    strings[23]=">";    strings[24]=">=";    strings[25]="=";    strings[26]=";";    strings[27]="(";    strings[28]=")";}

}

`

0 0
原创粉丝点击