Java 实现 词法分析 器

词法分析器Java实现
本文介绍了一个使用Java实现的简单词法分析器,能够识别并分类源代码中的保留字、标识符、常量等元素。该分析器通过读取文件内容,并利用字符判断函数来完成词法分析的任务。
//词法 信息器 Java版


// 导入 io 包


import java.io.BufferedReader;
import java.io.FileReader;




public class Lexical
{
//定义 保留字数组
private String[] keyWord={"if","else","int","for"
,"return","while","do","break","continue",
"printf","scanf","main","%d"} ;
//文件名
private String fileName;
// 定义 动态的 buffer 数组
StringBuffer buffer = new StringBuffer();




// 构造函数
// 词法分析 输入一个文件 url
public Lexical(String fileName)
{
this.fileName=fileName;
}

public static void main(String[] args)
{
//创建 一个 Lexical对象
Lexical lexical= new Lexical("D:/Study/Code/Love/aa.txt");
//调用 文件 读取 函数
lexical.readFile();
//调用 词法分析函数
lexical.analyze();

}


// 判断 是否 为 保留字 每次读取的字符串 ,
boolean isKeyWord(String ch)
{
for(int i=0;i<keyWord.length;i++)
{
if(keyWord[i].equals(ch))
{
return true;
}

}
return false;
}


// 判断 是否 为数字 读取 的 为 字符!
boolean isDigit(char ch)
{
if(ch>=48 &&ch<=57)
{
return true;
}else{
return false;
}
}


// 判断 是否 为字母! 读取的 为 字符
boolean isLetter(char ch)
{
if((ch>=65&&ch<=90)||(ch>=97&&ch<=122)||(ch==37))
{
return true;
}else{
return false;
}
}




// 读取文件 函数
public void readFile()
{
try{
// 创建 FileReader的对象 机读取的文件
FileReader file= new FileReader(this.fileName);
// 创建 BufferReader 的对象 创建 缓冲机制
BufferedReader buf= new BufferedReader(file);
// 定义 一个 临时的字符串 !用于 暂时存放 文件数据!
String temp= null;
while((temp = buf.readLine())!= null)
{
//将读取的 文件 内容追加至 动态的buffer数组中
buffer.append(temp);
}


}catch(Exception e){
System.out.println("文件操作错误!"+ e.toString());
}

}




// 词法分析 函数
public void analyze()
{
int i=0;
char ch;
while(i<buffer.length())
{
ch = buffer.charAt(i);
if(isLetter(ch))
{
//创建一个 字符串的 临时变量 存放字符
StringBuffer temp = new StringBuffer();
//将 字符 扔到 缓冲 临时区
temp.append(ch);
ch=buffer.charAt(++i);

while(isLetter(ch)||isDigit(ch))
{
temp.append(ch);
ch = buffer.charAt(++i);
}

if(isKeyWord(temp.toString()))
{
System.out.println(temp+"为保留字,编码为1!");
}else{
System.out.println(temp+"为标识符,编码为2");
}

}else if((ch==',')||(ch==';')||(ch=='{')||(ch=='}')
||(ch=='(')||(ch==')')||(ch=='/'))
{
System.out.println(ch+"为界符,编码为3");
i++;
}else if(isDigit(ch))
{
StringBuffer temp = new StringBuffer();
while(isDigit(ch)){
temp.append(ch);
ch = buffer.charAt(++i);
}
System.out.println(temp+"为常量,编码为4");
}
else if(ch !=' '){
StringBuffer temp = new StringBuffer();
temp.append(ch);
ch=buffer.charAt(++i);

if((ch=='=')||(ch=='+')||(ch=='-')||(ch=='*')||(ch=='/'))
{
temp.append(ch);
i++;
}

System.out.println(temp+"为运算符,编码为5");
}else{
i++;
}

}


}



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值