编译原理 Java 词法分析器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import java.io.*;
public class Analysis{
public static void main(String args[]){
if(args.length!=1){
System.out.println("参数个数不合法!五秒钟后自动退出!");
try{
Thread.sleep(5000);
}catch(InterruptedException e){
e.printStackTrace();
}
System.exit(1);
}else{
File fpath=new File(args[0]);
if(!fpath.exists()){
System.out.println("参数个数不合法!五秒钟后自动退出!");
try{
Thread.sleep(5000);
}catch(InterruptedException e){
e.printStackTrace();
}
System.exit(1);
}else{
String str=null; //读入的程序字符串
int start=0; //开始节点
int i=0;
try{
FileInputStream fr=new FileInputStream(fpath);
byte[] b=new byte[(int)fpath.length()];
fr.read(b);
str=new String(b);
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
char[] c=str.toCharArray();
for(i=0;i String s1=""+c[i]; //当前字符 String s2=s1; if(i!=c.length-1){ s2=s1+c[i+1]; //当前和下一个字符,防止越界 } if(start==i){ //忽略掉回车或者换行符,制表符 if(s1.equals("\r")||s1.equals("\n")||s1.equals("\t")){ start++; continue; } if(s2.equals("/*")){ System.out.println("/* 是注释开始符。"); System.out.println("以下为注释内容:"); System.out.print(str.substring(i+2,stIndexOf("*/"))); //打印注释 System.out.println("*/ 是注释结束符。"); start=str.indexOf("*/")+2; //跳过注释 i=start-1; continue; } if(s1.equals(" ")&&start==i){ //跳过普通空格 start++; continue; } if(("<= >= != ==").indexOf(s2)!=-1&&start==i){ i++; System.out.print(str.substring(start,i+1)); System.out.println(" 是专用符号。"); start+=2; continue; } if("+ - * / = < >".indexOf(s1)!=-1){ System.out.print(str.substring(start,i+1)); System.out.println(" 是专用符号。"); start++; continue; } if(s1.equals("(")){ System.out.println("( 是左小括号。"); start++; continue; } if(s1.equals(")")){ System.out.println(") 是右小括号。"); start++; continue; } if(s1.equals("[")){ System.out.println("[ 是左中括号。"); start++; continue; } if(s1.equals("]")){ System.out.println("] 是右中括号。"); start++; continue; } if(s1.equals("{")){ System.out.println("{ 是左大括号。"); start++; continue; } if(s1.equals("}")){ System.out.println("} 是右大括号。"); start++; continue; } if(s1.equals(",")){ System.out.println(", 是逗号。"); start++; continue;