编译原理词法分析(java)

这篇博客详细介绍了如何使用Java实现编译原理中的词法分析,通过读取文件并解析,展示了一个简单的词法分析过程,包括关键字、标识符、运算符、常数和分界符的识别。示例代码中包含了对不同字符类型的判断函数,并以一个简单的源代码字符串作为输入进行分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译原理词法分析(java版本)
读取文件,,
示例:
int aaa000sss =10;
if(a>=b)
{system 10;}
while(int a=10;i++)
{a*=10;a--;a+=10;<+;
return 0;}

最终结果为:
87
<int,关键字>
<aaa000sss,标识符>
<=,运算符>
<10,常数>
<;,分界符>
<if,关键字>
<(,分界符>
<a,标识符>
<>=,运算符>
<b,标识符>
<),分界符>
<{,分界符>
<system,关键字>
<10,常数>
<;,分界符>
<},分界符>
<while,关键字>
<(,分界符>
<int,关键字>
<a,标识符>
<=,运算符>
<10,常数>
<;,分界符>
<i,标识符>
<++,运算符>
<),分界符>
<{,分界符>
<a,标识符>
<*=,运算符>
<10,常数>
<;,分界符>
<a,标识符>
<--,运算符>
<;,分界符>
<a,标识符>
<+=,运算符>
<10,常数>
<;,分界符>
<<,运算符>
<+,运算符>
<;,分界符>
<return,关键字>
<0,常数>
<;,分界符>
<},分界符>
package downloadtest;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;

public class cifafenxi {

	private int count=0;
	private char[] a;
	char[] alls;
	public cifafenxi(){
		try {
			readFile();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//读取文件
	public int readFile() throws Exception{
		FileInputStream fileInputStream=new FileInputStream("D:\\text.txt");
		InputStreamReader reader=new InputStreamReader(fileInputStream);
		BufferedReader bufferedReader=new BufferedReader(reader);
		char[] cbuf=new char[1024];
		String text=null;
		String all="";
		while((text=bufferedReader.readLine())!=null){
			all=all+text;
		}
		alls=all.toCharArray();
		count=alls.length;
		System.out.println(count);
		a=new char[count];
		return count;
	}
	
	//识别字母
	public boolean isLetter(char letter){
		if((letter>='a'&&letter<='z')||(letter>='A'&&letter<='Z')){
			return true;
		}else{
			return false;
		}
	}
	//识别数字
	public boolean isNumber(char number){
		if(number>='0'&&number<='9'){
			return true;
		}else{
			return false;
		}
	}
	//识别分界符
	public boolean isBoundary(char boundary){
		char[] boundaryAll={',',';',':','"','(',')','{','}'};
		for(int i=0;i','<'};
		for(int i=0;i=","<="};
		for(int i=0;i");
					else
						System.out.println("<"+word+",标识符>");
					i--;
					continue;
				}
			}
			if(isFunction(alls[i])){//识别一元运算符和二元运算符
				String word=""+alls[i]+alls[i+1];
				if(isAllFunction(word)){
					System.out.println("<"+word+",运算符>");
					i++;
				}else{
					System.out.println("<"+alls[i]+",运算符>");
				}
				continue;
			}
			if(isBoundary(alls[i])){//识别分界符
				System.out.println("<"+alls[i]+",分界符>");
				continue;
			}
			if(isNumber(alls[i])){
				String word="";
				while(isNumber(alls[i])){//数字+数字
					word+=alls[i];
					i++;
					if(!isNumber(alls[i])){
						System.out.println("<"+word+",常数>");
						System.out.println("<"+alls[i]+",分界符>");
					}
				}
				/*while(isLetter(alls[i])){//数字+字母
					word+=alls[i];
					i++;
					if(isBoundary(alls[i])||isFunction(alls[i])){
						System.out.println("<"+word+",标识符>");
					}
				}*/
				continue;
			}
		}
	}
	public static void main(String[] args) {
		cifafenxi cifafenxi=new cifafenxi();
		cifafenxi.Run();
	}
}
下次写一个编译原理(C)版本的语法分析!时间好紧,,还有好多事,复习功课啊,刚巴黎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值