• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2022-08-09
  • 语言: Java
  • 标签: 编译  java  语法分析  

资源简介

java实现的语法分析器,包括词法分析 语法分析采用自顶向下,递归下降的方法

资源截图

代码片段和文件信息

import java.io.*;
import java.util.*;
public class cifa {

/**
 * @param args
 */
static int code;
static String value;
static int index;
static StringBuilder sb;
static String s;
static char ch;
static String[] key ={“program““begin““end““var““integer““if““then““else““do““while“};
static int linenum;
static boolean isLetter(char ch){
return ((ch>=‘a‘)&&(ch<=‘z‘))||((ch>=‘A‘)&&(ch<=‘Z‘));
}

static boolean isDigit(char ch){
return (ch>=‘0‘)&&(ch<=‘9‘);
}

static boolean isBC(char ch){
return (ch==‘ ‘)||(ch==9);
}

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

BufferedReader in = new BufferedReader(new FileReader(“in.txt“));
PrintWriter out = new PrintWriter(new BufferedWriter (new FileWriter(“out.txt“)));
linenum=1;
while((s=in.readLine())!=null){
index=0;
while(index sb = new StringBuilder();
ch = s.charAt(index++);
while(isBC(ch)){
if(index ch = s.charAt(index++);
}else {
index++;
break;
}
}
if(isLetter(ch)){
while(isLetter(ch)||isDigit(ch)){
sb.append(ch);
//
if(index ch = s.charAt(index++);
}else {
index++;
break;
}
}
index--;
code=0;
String temp=sb.toString();
for(int i=0;i<10;i++){
if(key[i].equals(temp)){
code=i+1;
value=“__“;
}
}
if(code==0){
out.println(“(11“ +sb + “)“);
}else{
out.println(“(“+ code +““ +value + “)“);
}
}
else if(isDigit(ch)){
while(isDigit(ch)){
sb.append(ch);
//
ch=s.charAt(index++);
}
index--;
out.println(“(12“ +sb + “)“);

}else if(ch==‘+‘){out.println(“(13__)“);}
else if(ch==‘-‘){out.println(“(14__)“);}
else if(ch==‘(‘){out.println(“(15__)“);}
else if(ch==‘)‘){out.println(“(16__)“);}
else if(ch==‘=‘){out.println(“(17__)“);}
else if(ch==‘>‘){out.println(“(18__)“);}
else if(ch==‘<‘){out.println(“(19__)“);}
else if(ch==‘;‘){out.println(“(20__)“);}
else if(ch==‘‘){out.println(“(21__)“);}
else if(ch==‘:‘){
if(s.charAt(index++)==‘=‘){
out.println(“(23__)“);
}
else{
index--;
out.println(“(22__)“);
}
}else if(ch==‘*‘){out.println(“(24__)“);}
else if(ch==‘/‘){out.println(“(25__)“);}
}
}
in.close();
out.close();
}

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        232  2009-05-25 19:54  bianyi\.classpath

     文件        382  2009-05-25 19:54  bianyi\.project

     文件       3300  2009-05-25 20:16  bianyi\bin\cifa.class

     文件       3251  2009-05-25 21:25  bianyi\bin\yufatest.class

     文件         30  2009-05-25 21:24  bianyi\in.txt

     文件        134  2009-05-25 21:24  bianyi\out.txt

     文件       2582  2009-05-25 20:16  bianyi\src\cifa.java

     文件       3145  2009-05-25 21:25  bianyi\src\yufatest.java

     文件          0  2009-05-25 21:25  bianyi\yufaout.txt

     目录          0  2009-05-26 14:53  bianyi\bin

     目录          0  2009-05-26 14:53  bianyi\src

     目录          0  2009-05-26 14:53  bianyi

----------- ---------  ---------- -----  ----

                13056                    12


评论

共有 条评论