大学时,编译原理,离散数学等没有学好,以为用处不大,现在才觉得越来越重要。 例如:我们要分析项目中的java源代码,查找不符合我们规范的代码,这些查找需要分析java语言的语法,不是仅仅通过正则表达式等所能做到的。
再例如:任意一给定的sql,我们要进行sql分析及信息提取,就象hibernate 3用antlr分析hql一样。
其他如:格式转换,脚本引擎等都需要用到编译原理相关知识。最近我看了一下antlr,想用它来做java语言的语法分析器,进行java源代码的分析,下面我们从一个简单的需求开始: 需求:我想查找下面的源代码中所有没有被注释的System.out.printlnimport antlr.CommonAST;
import antlr.debug.misc.ASTFrame;import java.io.StringReader;public class TestSample2 {
public static void main(String[] args) {
try {
StringReader sr = new StringReader("3-4*5+2-2^1*3-3*9-1;");
ExpressionLexer lexer = new ExpressionLexer(sr); ExpressionParser parser = new ExpressionParser(lexer);
parser.expr(); CommonAST parseTree = (CommonAST)parser.getAST();
// System.out.println(sr); /*
System.out.println(parseTree.toStringList());
System.out.println("…………");
*/ System.out.println(parseTree.toStringList());//只有这个System.out.println才是我们要找的
ASTFrame frame = new ASTFrame("The tree", parseTree);
frame.setVisible(true); } catch(Exception e) { System.err.println("Exception: "+e); }
}
}
请各位有经验的高手指导,大家如果有antlr应用等方面的资料也请提供,谢谢!
再例如:任意一给定的sql,我们要进行sql分析及信息提取,就象hibernate 3用antlr分析hql一样。
其他如:格式转换,脚本引擎等都需要用到编译原理相关知识。最近我看了一下antlr,想用它来做java语言的语法分析器,进行java源代码的分析,下面我们从一个简单的需求开始: 需求:我想查找下面的源代码中所有没有被注释的System.out.printlnimport antlr.CommonAST;
import antlr.debug.misc.ASTFrame;import java.io.StringReader;public class TestSample2 {
public static void main(String[] args) {
try {
StringReader sr = new StringReader("3-4*5+2-2^1*3-3*9-1;");
ExpressionLexer lexer = new ExpressionLexer(sr); ExpressionParser parser = new ExpressionParser(lexer);
parser.expr(); CommonAST parseTree = (CommonAST)parser.getAST();
// System.out.println(sr); /*
System.out.println(parseTree.toStringList());
System.out.println("…………");
*/ System.out.println(parseTree.toStringList());//只有这个System.out.println才是我们要找的
ASTFrame frame = new ASTFrame("The tree", parseTree);
frame.setVisible(true); } catch(Exception e) { System.err.println("Exception: "+e); }
}
}
请各位有经验的高手指导,大家如果有antlr应用等方面的资料也请提供,谢谢!
public static void main(String[] args) {
// System.out.println(sr); /*
System.out.println(parseTree.toStringList());
System.out.println("…………");
*/ System.out.println(parseTree.toStringList());//只有这个System.out.println才是我们要找的
}
}
你说的可以检查没有没有加开关的log4j日志代码是什么工具?谢谢!