词法分析java代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import java.io.*;
public class LexicalAnalysis {
String filename;
File fr = new File("c:\\Test1.txt");
int count = 0;
char buffer[]=new char[100];
public LexicalAnalysis(String filename)
{
this.filename=filename;
}
public void readFile()throws FileNotFoundException
{
try
{
BufferedReader br = new BufferedReader(new FileReader(fr));
do
{
count=br.read(buffer);
}while(count!=-1);
br.close();
}
catch (Exception e)
{
System.out.println("文件操作错误:" + e.toString());
}
}
boolean IsLetters(char ch) //字母判断
{
if(ch>='a' && ch<='z' || ch>='A' && ch<='Z')
return true;
else
return false;
}
boolean IsBlank(char ch) //空格判断
{
if(ch==' ')
return true;
else
return false;
}
boolean IsNumber(char ch) //数字判断
{
if(ch>='0' && ch<='9')
return true;
else
return false;
}
boolean IsOperator(char ch) //运算符判断
{
char a[]={'+','-','*','/','=','<','>','!'};
int j=0;
for(j=0;j
if(ch==a[j])
return true;
}
return false;
}
boolean IsSeparator(char ch) //分隔符判断
{
int k;
char b[]={',',';','{','}','(',')'};
for(k=0;k
if(ch==b[k])
return true;
}
return false;
}
public void Analysis()
{
int i=0;
char ch;
while(i
ch=buffer[i];
if(IsLetters(ch)) //保留字和标示符判断
{
String c[]={"if","int","for","while","do","return","break","continue"};
String word="";
boolean flag=true; //是否是保留字或标示符的标志
while(IsLetters(ch)||IsNumber(ch))
{
word+=ch;
i++;
ch=buffer[i];
if(IsNumber(ch)) //若单词中有数字,则被认为是标示符
flag=false;
}
if(flag==true)
{
int m=0;
for(m=0;m
if(word.equals(c[m]))
{
System.out.println("(1,'"+word+"')");
break;
}
}
if(m>=c.length)
System.out.println("(2,'"+word+"')");
}
else
System.out.println("(2,'"+word+"')");
}
else if(IsNumber(ch)) //数字处理
{
String num="";
while(IsNumber(ch)&& i
num+=ch;
i++; //下一个字符
ch=buffer[i];
}
try{
int p=Integer.parseInt(num);
System.out.println("(3,'"+p+"')"); //
异常处理
}
catch(NumberFormatException e)
{
System.out.println(num+"非法字符,无法转换!");
}
}
while(IsBlank(ch)&& i
i++; //下一个字符
ch=buffer[i];
}
if(IsOperator(ch)&& i
char x=ch;
String y=""+x;
if(x=='<' || x=='>' || x=='!')
{
i++;
ch=buffer[i];
if(ch=='=')
y=y+ch;
}
i++; //下一个字符
System.out.println("(4,'"+y+"')");
}
else if(IsSeparator(ch)&& i
i++; //下一个字符
System.out.println("(5,'"+ch+"')");
}
if(!IsSeparator(ch)&&!IsBlank(ch)&&!IsOperator(ch)&&!IsNumber(ch)&&!IsLetters(ch)) //非法字符处理
{
if(IsBlank(ch))
System.out.println("Error!="+ch);
i++;
}
}
}
public static void main(String args[])throws IOException
{
LexicalAnalysis fr=new LexicalAnalysis("C:\\Test1.txt");
fr.readFile();
fr.Analysis();
}
}