📄 cifafenxi.txt
字号:
package 编译原理;
import java.io.*;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.util.StringTokenizer;
public class test{
public static int enter_count = 0;
public static int space_count = 0;
String result=null;
public String getResult() {
return result;
}
public test(String path){
File file=new File(path);
int i = 0,j = 0,k = 0,n = 0,m = 0;
int count = 0,count1 = 0;
String s1[]=new String[20];
String s2[]=new String[20];
String s3[]=new String[20];
String s4[]=new String[20];
String s5[]=new String[20];
String s6[]=new String[20];
String s7[]=new String[20];
String s8[]=new String[20];
String s9[]=new String[20];
String s10[]=new String[20];
String s11[]=new String[20];
String s12[]=new String[20];
try{
//计算行数
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
while(dis.readLine()!=null){
enter_count++;
}
//将每一行符值给一个字符串
fis = new FileInputStream(file);//由于上面的dis.readLine()将文件读完了,所以要从新初始化一遍
dis = new DataInputStream(fis);
String s[] = new String[enter_count];
i = 0;
while(dis.available()!=0){
s[i] = dis.readLine();
s1[i]=s[i];
i++;
}
dis.close();
//将每个字符串以空格分割
for(i=0;i<enter_count;i++){
StringTokenizer space = new StringTokenizer(s[i]," ");
space_count = space.countTokens();
while(space.hasMoreTokens()){
s2[n]=space.nextToken();
n++;
j++;
}
j=0;
}
//将每个字符串以"+"号分开
n=0;
for(i=0;i<6;i++){
StringTokenizer space = new StringTokenizer(s2[i],"+",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s3[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count=0;
//s4
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s3[i],"-",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s4[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s5
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s4[i],"*",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s5[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s6
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s5[i],"/",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s6[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s7
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s6[i],"<",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s7[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s8
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s7[i],">",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s8[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s9
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s8[i],"=",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s9[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s10
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s9[i],"(",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s10[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s11
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s10[i],")",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s11[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//s12
n=0;
for(i=0;i<count1;i++){
StringTokenizer space = new StringTokenizer(s11[i],";",true);
space_count = space.countTokens();
while(space.hasMoreTokens()){
s12[n]=space.nextToken();
n++;
j++;
count++;
}
j=0;
}
count1=count;
count = 0;
//去处空格
String s_final[]=new String[count1];
for(i=0;i<count1;i++){
s_final[i]=s12[i].trim();
}
//判断前缀
boolean word=false;
for(i=0;i<count1;i++){
word=false;
//如果是关键字
String keyword[]={"if","then","else","while","do"};
for(j=0;j<5;j++){
if(s_final[i].compareTo(keyword[j])==0){
System.out.println("<"+s_final[i]+","+"->");
word=true;
}
}
//如果是运算符或界符
String operators[]={"+","-","*","/","<",">","=","(",")",";"};
for(j=0;j<10;j++){
if(s_final[i].compareTo(operators[j])==0){
System.out.println("<"+s_final[i]+","+"->");
word=true;
}
}
if(word){
continue;
}
//如果是十进制
if((s_final[i].compareTo("0")==0)||s_final[i].startsWith("1")||s_final[i].startsWith("2")||s_final[i].startsWith("3")||s_final[i].startsWith("4")||s_final[i].startsWith("5")||s_final[i].startsWith("6")||s_final[i].startsWith("7")||s_final[i].startsWith("8")||s_final[i].startsWith("9")){
// System.out.println("<1,"+s_final[i]+">");
result=result+"<1,"+s_final[i]+">"+"\n";
}
//如果是八进制
if(s_final[i].startsWith("0")&&(!s_final[i].startsWith("0x"))){
// System.out.println("<2,"+s_final[i].substring(1)+">");
result=result+"<2,"+s_final[i].substring(1)+">"+"\n";
}
//如果是十六进制
if(s_final[i].startsWith("0x")){
// System.out.println("<3,"+s_final[i].substring(2)+">");
result=result+"<3,"+s_final[i].substring(2)+">"+"\n";
}
//如果是标示符
if(s_final[i].startsWith("0")){ }
else{
// System.out.println("<0,"+s_final[i]+">");
result=result+"<0,"+s_final[i]+">"+"\n";
}
}
}catch(Exception e){
System.err.println("File input error");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -