一个自己写的小词法分析程序
`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]=")";
}
}
`