熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

利用JAVACC將HQL-SQL

2013-11-15 11:50:33  來源: JSP教程 

  首先下載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
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19735.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.