A Gentle Introduction to ANTLR Syntax,在《程序员》2004年3月有中文的版本。
ExprLexer lexer = new ExprLexer(System.in); ExprParser parser = new ExprParser(lexer); parser.expr(); AST ast = parser.getAST(); ExprTreeParser treeParser = new ExprTreeParser(); int x = treeParser.expr(ast);
1.定义Lexer类,在类中定义各种Token如 From , Where,=,<>.......
Lexer负责把读入的普通文本识别成Token串。2.定义Parser类,在类中使用BNF语法,递归定义各种句子,如whereStatement、FromStatement、Select Statement。
Pattern负责把读入的Token串匹配成句子,翻译出AST(抽象语法树)
有些简单的应用,也可以在本层现炒现卖,完成所有动作,属于Single Pass Builder。3.定义TreeParser类,根据Parser类分析出来的AST(抽象语法树)进行动作。
用Parser把AST抽取出来,再用TreeParser进行动作的Double Pass Builder模式,解耦了Parser和Generation,再配合Template,是Antlr推荐的最佳模式。
log4j.logger.org.hibernate=debug #log4j.logger.org.hibernate.hql=debug #log4j.logger.org.hibernate.hql.ast.AST=debug #log4j.logger.org.hibernate.SQL=debug #log4j.logger.org.hibernate.type=debug #log4j.logger.org.hibernate.tool.hbm2ddl=debug #log4j.logger.org.hibernate.cache=debug #log4j.logger.org.hibernate.transaction=debug #log4j.logger.org.hibernate.jdbc=debug #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=debug