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

📄 cifa.java

📁 java语言写的词法分析器
💻 JAVA
字号:
public class Cifa {
	String proc,out;
	StringBuffer token;
	char ch;
	int syn,p,n,sum;
	static String rwtab[]={"begin","if","then","while","do","end"};
	int line;
	boolean iserror;
Cifa(String s){
	proc=s;
	line=1;
	//error=false;
}
public String getString(){
	out="";
	do{		
		scaner();
		if(syn==11)
			out+=("Line "+line+" ( 11,"+sum+" )\n");
		else if(syn==-1){
			out+="Line "+line+" Error!\n" ;
			iserror=true;
		}
		else if(syn!=30)
			out+="Line "+line+" ( "+syn+","+token+" )\n";
	}while(syn!=0);
	if(iserror)
		out+="词法分析出错!";
	return out;
}

void scaner(){
	sum=0;
	token=new StringBuffer(30);
	ch=proc.charAt(p++);
	while(ch==' '||ch=='\n'){
		if(ch==' ')
			ch=proc.charAt(p++);
		else{//\n
			syn=30;
			line++;
			ch=proc.charAt(p++);
		}
	}
	if((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')){
		while((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')||(ch<='9'&&ch>='0')){
			token.append(ch); 
			ch=proc.charAt(p++);
		}
		p--;
		syn=10;
		for(n=0;n<6;n++){
			if(token.toString().equals(rwtab[n])){
				syn=n+1;//get rid 0
				break;
			}
		}
	}
	else if(ch<='9'&&ch>='0'){
		while(ch<='9'&&ch>='0'){
			sum=sum*10+ch-'0';
			ch=proc.charAt(p++);
		}
		if((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')){
			syn=-1;
		}
		else{
			p--;
			syn=11;
		}
	}
	else
		switch(ch){
		case '<':token.append(ch);;
				 ch=proc.charAt(p++);
				if(ch=='>'){
					syn=21;
					token.append(ch);;
				}
				else if(ch=='='){
					syn=22;
					token.append(ch);;
				}
				else{
					syn=20;
					p--;
				}
				break;
		case '>':token.append(ch);;
				 ch=proc.charAt(p++);
				if(ch=='='){
					syn=24;
					token.append(ch);;
				}
				else{
					syn=23;
					p--;
				}
				break;
		case ':':token.append(ch);;
				 ch=proc.charAt(p++);
				if(ch=='='){
					syn=18;
					token.append(ch);;
				}
				else{
					syn=17;
                    p--;
                }					
				break;
		case '+':syn=13;token.append(ch);;break;
		case '-':syn=14;token.append(ch);;break;
		case '*':syn=15;token.append(ch);;break;
		case '/':syn=16;token.append(ch);;break;
		case '(':syn=27;token.append(ch);;break;
		case ')':syn=28;token.append(ch);break;
		case '=':syn=25;token.append(ch);break;
		case ';':syn=26;token.append(ch);break;
		case '"':syn=29;token.append(ch);break;
		case '#':syn=0;token.append(ch);break;
		//case '\n':syn=30;line++;break;
		default:syn=-1;
	}
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -