java

位置:IT落伍者 >> java >> 浏览文章

利用JAVACC将HQL-SQL


发布日期:2021年09月16日
 
利用JAVACC将HQL-SQL

首先下载JAVACC编写jj文件

定义要空开的分隔符

SKIP :

{

| \t

| \n

| \r

| \f

}

定义关键字from 为HQL的关键字Teacher是用户输入的类名应当是一个任意由字母和数字组成的单词我们可以用正则表达式:[AZaz]来表示

TOKEN: /*RESERVED TOKENS FOR UQL */

{

<FROM:from>

| <FROM_OBJECT:([AZaz])+ >

}

接下来定义一下输入的顺序与规范

void expression() :

{

Token tTable;

}

{

(

<FROM>

tTable = <FROM_OBJECT>

)

{

sqlSBappend(SELECT *);

sqlSBappend( FROM )append(tTableimage);

}

}

最后就是写解析代码以便生成java代码

PARSER_BEGIN(HQLParser)

import javalangStringBuffer;

import javaioStringReader;

import javaioReader;

public class HQLParser {

private static StringBuffer sqlSB;

/**

A String based constructor for ease of use

**/

public HQLParser(String s)

{

this((Reader)(new StringReader(s)));

sqlSB = new StringBuffer();

}

public String getSQL()

{

return sqlSBtoString();

}

public static void main(String args[])

{

try

{

String query = args[];

HQLParser parser = new HQLParser(query);

parserparse();

Systemoutprintln(SQL:+parsergetSQL());

}

catch(Exception e)

{

eprintStackTrace();

}

}

public void parse()

{

try

{

expression();

}

catch(Exception e)

{

eprintStackTrace();

}

}

}

PARSER_END(HQLParser)

接下来到dos下输入:

javacc debug_parser testjj

debug_parser:用来输出语法树

这时候会生成个java文件每个文件的作用以后会详细说明

这时候只需要

javac *java即可编译全部的java文件

然后执行java HQLParser from Teacher

这时候屏幕上就会显示出select * from Teacher               

上一篇:Java中鲜为人知的缺点(下)

下一篇:Java语言中Timer类的简洁用法(一)