package Scanner.SCANNER;
public class Judgement {
private String[] KeyWord={"else","if","int","return","void","while"};//关键字存储器
private String[] Sign={"+","-","*","/","<","<=",">",">=","==","!=","=",";",",","(",")","[","]","{","}"};//符号存储器
public char[] Buffer;//缓冲存储区
private int flag=0;//扫描器指针
private String str=new String();//判断字符
public String strout;//判断后输出字符
public int[] Keynum={41,42,43,44,45,46};//关键字对应码种
private String str1[]=new String[20]; //字符串缓冲器,用来缓存字符串,判断是否重复
private int c[]=new int[20]; //字母个数标示
private int n=0;//缓冲区指针
/*-----------------------------------指针操作-------------------------------*/
//取当前指针
public int setFLag(int a){
flag=a;
return flag;
}
public int GetFlag(){
return flag;
}
//指针前移
public int IncFlag(){
flag++;
return flag;
}
//指针后移
public int DecFlag(){
flag--;
return flag;
}
/*-----------------------------------存储器操作-----------------------------*/
//关键字读,写,修改
public void ReadKeyWord(){
//显示现有KeyWord
}
public Boolean WirteKeyWord(String NewKey){
//添加一个值为NewKey的新Key.成功返回true...
boolean flag=false;
return flag;
}
public Boolean ChangeKeyWord(String OldKey,String NewKey){
//修改一个值为OldKey的Key,新值为NewKey,成功返回true...
boolean flag=false;
return flag;
}
//符号读,写,修改
public void ReadSignWord(){
//显示现有Sign
}
public Boolean WirteSign(String NewSign){
//添加一个值为NewSign的新Sign.成功返回true...
boolean flag=false;
return flag;
}
public Boolean ChangeSigWord(String OldKey,String NewKey){
//修改一个值为OldSign的Sign,新值为NewSign,成功返回true...
boolean flag=false;
return flag;
}
/*----------------------------------------判断操作p---------------------------*/
//IsDigit,判断是否是数字
public Boolean IsDigit(){
//判断是否是Digit,是返回true...
int mn=0;//整数标志
Boolean Flag=false;//
//继续判断是否是数字或者“.”或者字母
while(flag<Buffer.length&& !Character.isSpace(Buffer[flag])&& Buffer[flag]!='('&& Buffer[flag]!=')'&& Buffer[flag]!='+'&& Buffer[flag]!='*'&& Buffer[flag]!='/'&& Buffer[flag]!='>'&& Buffer[flag]!='<'&& Buffer[flag]!='='&& Buffer[flag]!=','&& Buffer[flag]!=';'|| ((flag<Buffer.length && Character.isDigit(Buffer[flag]))||(flag<Buffer.length && Buffer[flag]=='.')||(flag<Buffer.length && Character.isLetter(Buffer[flag])))){
str=str+str.valueOf(Buffer[flag]);
flag++;
}
/*---------分析str--------*/
//存在字母
for (int i=0;i<str.length();i++){
if(str.charAt(i)!='.'&& !Character.isDigit(str.charAt(i)))
mn=1;
}
// 判断是否是浮点数,或者整数
if(mn==0){
for(int k=0;k<str.length();k++)
{
if(str.charAt(k)=='.')
Flag=true;
}
//这里是貌似有问题哦
if(Flag){
float f=Float.valueOf(str);
strout=str+"\t"+Float.toHexString(f)+"\n";
}
else
//整数
{int x=Integer.valueOf(str);
strout=str+"\t"+Integer.toBinaryString(x)+"\n";
}
}
//判断是否是科学计数法
else{
int xy=0,ab=0;
for(int i=0;i<str.length();i++)
if(Character.isLetter(str.charAt(i))||str.charAt(i)=='-')
{
xy++;
ab=i;
}
if(xy==1 && str.charAt(ab)=='e')
strout=str+"\t"+"e"+str+"\n";
else if(xy==2 && str.charAt(ab)=='-' && str.charAt(ab-1)=='e')
{
strout=str+"\t"+"-e"+str+"\n";
}
else
strout=str+"\t"+"非法标志符"+"\n";
}
str=""; //清空str
return true;
}
//IsLetter,判断是否是字母或者KeyWord
public Boolean IsLetter(){
//判断是否是Letter,是则返回true...
for(int i=0;i<20;i++)
{
c[i]=i;
}
//是数字或者是字母
while((flag<Buffer.length && Character.isLetter(Buffer[flag]))||(flag<Buffer.length && Character.isDigit(Buffer[flag]))){
str=str+str.valueOf(Buffer[flag]);
flag++;
}
int q=1;
while(q==1){
for(int i=0;i<KeyWord.length;i++){
if(str.equalsIgnoreCase(KeyWord[i])){
strout=str+"\t"+Keynum[i]+"\n";
q=0;
return true;
}
q=0;
}
}
int p=1;
//判断是否存在非字符或数字符号
for(int i=0;i<str.length();i++)
{
if(!Character.isLetter(str.charAt(i))&&!Character.isDigit(str.charAt(i)))
p=0;
}
if(p==1)
{
for(int j=0;n>0 && j<n;j++)
{
if( str.equals(str1[j]))
{ strout=str+"\t"+c[j]+"\n";
str="";
}
}
//无重复
if(str!="")
{str1[n]=str;
strout=str+"\t"+c[n]+"\n";
n++;}
str="";
}
else {
strout=str+"\t"+"非法标志符"+"\n";
}
str="";
Boolean flag1=true;
return flag1;
}
//IsSign,判断是否是符号
public Boolean IsSign(){
//判断是否是Sign,是则返回true...
Boolean flag1=true;
return flag1;
}
}
词法分析 scanner 源代码 详细注释
4星 · 超过85%的资源 需积分: 10 55 浏览量
2009-05-19
10:28:14
上传
评论
收藏 9KB RAR 举报
xzh945
- 粉丝: 8
- 资源: 2
最新资源
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
- 基于matlab+DWT的图像水印项目,数字水印+源代码+文档说明+图片+报告pdf
- (优秀毕业设计)基于python实现的数字图像可视化水印系统的设计与实现,多种数字算法实现+源代码+文档说明+理论演示pdf
- 基于DWT-DCT-SVD和deflate压缩的数字水印方法python源码+Gui界面+演示视频(高分毕业设计)
- 基于matlab实现DWT、DCT、SVD算法数字图像水印可视化系统+GUI界面+文档说明+详细注释(高分毕业设计)
- NCIAE-Data-Structure大一大二笔记
- 学习wireshark笔记
- digital-image-数据可视化笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈