Antlr--看Hibernate3如何解释HQL语言(上)

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

ANTLR(ANother Tool for Language Recognition)现在风头正盛,很多项目都用它来做语法解释器,Hibernate也在3.0的时候换上它来解释HQL,使HQL的语法获得了加强。

因为Antlr是EBNF语法解释系的代表,而自己总是心思思想搞一下DSL(领域语言),所以就借Hibernate来学习了一把Antlr。 Antlr最好的介绍文章是那篇A Gentle Introduction to ANTLR Syntax,在《程序员》2004年3月有中文的版本。

不过,那个计算器的例子太简单了,了解完基本原理后,还是要看看Hibernate的实战。

另外,SlickEdit 支持Antrl的语法,是一定要用的编辑器,在 ttdown.com上有破解。

一,Antlr引擎的工作过程大概是这样的:

1.定义Lexer类,在类中定义各种Token如 From , Where,=,<>.......

Lexer负责把读入的普通文本识别成Token串。

2.定义Parser类,在类中使用BNF语法,递归定义各种句子,如whereStatement、FromStatement、Select Statement。

Pattern负责把读入的Token串匹配成句子,翻译出AST(抽象语法树)

有些简单的应用,也可以在本层现炒现卖,完成所有动作。

3.定义TreeParser类,根据Parser类分析出来的AST(抽象语法树)进行动作。

二,开发人员的实际步骤

1.按照Antlr的简单语法定义前面讲的3个类,文件的后缀名为g

2.使用java antlr.Tool xxx.g 命令 ,把grammar文件编译成java文件

3.编写应用程序,如:

import antlr.*;

import antlr.collections.*;

public class Main {

public static void main(String[] args) throws Exception {

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);

}

}

(待续)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有