语法分析代码
2009-10-07 16:40
441 查看
import java.util.List;
import test.Analysis;
import test.Grammar;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[][] table = {
{"1", "2", "3", ":", "/", ".", "?", ";", "//"},
{"", "1", "", "", "", "", "", "", ""},
{"", "", "", "2", "", "5", "", "", ""},
{"", "", "", "", "", "", "", "", "3"},
{"", "4", "", "", "", "", "", "", ""},
{"", "", "", "", "", "5", "", "", ""},
{"", "6", "", "", "", "", "", "", ""},
{"", "", "", "7", "0", "5", "0", "0", ""},
{"8", "", "", "", "", "", "", "", ""},
{"", "", "", "", "0", "", "0", "0", ""}
};
Grammar grammar = new Grammar(table);
Analysis an = new Analysis();
List list = an.scan("https://www.google.w.cn:80/search?hl=zh-CN你好&newwindow=1&q=fy+%E5%88%A4%E6%96%AD&aq=f&oq=&aqi=");
//an.print(list);
String result = grammar.analysis2(list);
System.out.println(result);
}
}
package test;
import java.util.HashMap;
import java.util.List;
public class Grammar {
private HashMap map = new HashMap();
public Grammar(String[][] table) {
String[] temp;
String[] v;
int s = table.length;
int l = 0;
temp = table[0];
l = temp.length;
for(int i=1;i<s;i++) {
HashMap m = new HashMap();
v = table[i];
for(int j=0;j<l;j++) {
String t = v[j];
if(t == null || t.length() ==0) {
t = "-1";
}
m.put(temp[j], t);
}
this.map.put(i-1, m);
}
}
public String analysis2(List<Item> result) {
StringBuilder builder = new StringBuilder();
int state = 0;
int s;
s = result.size();
for(int i=0;i<s;i++) {
builder.append(result.get(i).getContent());
Item item = result.get(i);
String temp;
if(item.getType() == 1 || item.getType() == 2 || item.getType() == 3) {
HashMap t = (HashMap) map.get(state);
temp = (String) t.get(String.valueOf(item.getType()));
} else {
HashMap t = (HashMap) map.get(state);
temp = (String) t.get(item.getContent());
}
if(temp != null) {
int v = 0;
try{
v = Integer.parseInt(temp);
} catch(Exception e) {
v = -1;
}
if(v == 0) {
break;
} else if(v == -1) {
builder.delete(0, builder.length());
break;
} else {
state = v;
}
} else {
builder.delete(0, builder.length());
break;
}
}
return builder.toString();
}
}
import test.Analysis;
import test.Grammar;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[][] table = {
{"1", "2", "3", ":", "/", ".", "?", ";", "//"},
{"", "1", "", "", "", "", "", "", ""},
{"", "", "", "2", "", "5", "", "", ""},
{"", "", "", "", "", "", "", "", "3"},
{"", "4", "", "", "", "", "", "", ""},
{"", "", "", "", "", "5", "", "", ""},
{"", "6", "", "", "", "", "", "", ""},
{"", "", "", "7", "0", "5", "0", "0", ""},
{"8", "", "", "", "", "", "", "", ""},
{"", "", "", "", "0", "", "0", "0", ""}
};
Grammar grammar = new Grammar(table);
Analysis an = new Analysis();
List list = an.scan("https://www.google.w.cn:80/search?hl=zh-CN你好&newwindow=1&q=fy+%E5%88%A4%E6%96%AD&aq=f&oq=&aqi=");
//an.print(list);
String result = grammar.analysis2(list);
System.out.println(result);
}
}
package test;
import java.util.HashMap;
import java.util.List;
public class Grammar {
private HashMap map = new HashMap();
public Grammar(String[][] table) {
String[] temp;
String[] v;
int s = table.length;
int l = 0;
temp = table[0];
l = temp.length;
for(int i=1;i<s;i++) {
HashMap m = new HashMap();
v = table[i];
for(int j=0;j<l;j++) {
String t = v[j];
if(t == null || t.length() ==0) {
t = "-1";
}
m.put(temp[j], t);
}
this.map.put(i-1, m);
}
}
public String analysis2(List<Item> result) {
StringBuilder builder = new StringBuilder();
int state = 0;
int s;
s = result.size();
for(int i=0;i<s;i++) {
builder.append(result.get(i).getContent());
Item item = result.get(i);
String temp;
if(item.getType() == 1 || item.getType() == 2 || item.getType() == 3) {
HashMap t = (HashMap) map.get(state);
temp = (String) t.get(String.valueOf(item.getType()));
} else {
HashMap t = (HashMap) map.get(state);
temp = (String) t.get(item.getContent());
}
if(temp != null) {
int v = 0;
try{
v = Integer.parseInt(temp);
} catch(Exception e) {
v = -1;
}
if(v == 0) {
break;
} else if(v == -1) {
builder.delete(0, builder.length());
break;
} else {
state = v;
}
} else {
builder.delete(0, builder.length());
break;
}
}
return builder.toString();
}
}
相关文章推荐
- 语法分析表产生器的代码之一:主函数main.cpp
- 吉首大学_编译原理实验题_基于预测方法的语法分析程序的设计【通过代码】
- [置顶] 算术表达式的语法和语义分析(算符优先分析方法生成三元式的中间代码)
- atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结
- 语法分析表产生器的代码之二:自定义类的声明文件myclass.h
- atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结
- 关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--PHP脚本的执行 词法分析和语法分析
- C陷阱与缺陷代码分析之第2章语法陷阱
- 语法分析表产生器的代码之三:自定义类的实现函数文件implement_syntax.cpp
- 关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码
- MySQL union 语法代码示例分析
- MySQL union 语法代码示例分析
- HM中语法元素二进制化的相关代码分析
- 吉首大学_编译原理实验题_基于预測方法的语法分析程序的设计【通过代码】
- C陷阱与缺陷代码分析之第2章语法陷阱
- 编译原理-词法分析-语法分析-语义分析生成中间代码-python版
- 汇编语言AAA指令多字节加法代码分析(5)
- MINI2440 按键输入子系统 驱动及测试代码分析
- Android自带音乐播放器代码分析(2)