国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

教你如何利用JAVACC將HQL轉換為SQL

2019-11-18 13:09:40
字體:
來源:轉載
供稿:網友

  主要是為了嘗試一下javaCC,利用編譯原理的思路構造自己的語言:)
  
  首先到https://javacc.dev.java.net/ JAVACC的老家下載JAVACC
  
  我們今天的目標就是把from Teacher轉化為select * from Teacher
  
  首先編寫.jj文件
  
  1.定義要空開的分隔符
  java代碼:
  
  
  SKip :
  {
   " "
   "/t"
   "/n"
   "/r"
   "/f"
  }
  
  
  2.定義要害字。from 為HQL的要害字,Teacher是用戶輸入的類名,應當是一個任意由字母和數字組成的單詞,我們可以用正則表達式:["A"-"Z","a"-"z","0"-"9"]來表示。
  
  java代碼:
  
  
  TOKEN: /*RESERVED TOKENS FOR UQL */
  {
    <FROM:"from">
    <FROM_OBJECT:(["A"-"Z","a"-"z","0"-"9"])+ > //自己替換[]
  }
  
  
  3.接下來定義一下輸入的順序與規范
  java代碼:
  
  
  void eXPRession() :
  {
  Token tTable;
  }
  {
  (
   <FROM>
   tTable = <FROM_OBJECT>
  )
  {
   sqlSB.append("SELECT *");
   sqlSB.append(" FROM ").append(tTable.image);
  }
  }
  
  
  最后就是寫解析代碼,以便生成java代碼
  
  java代碼:
  
  
  PARSER_BEGIN(HQLParser)
  
  import java.lang.StringBuffer;
  import java.io.StringReader;
  import java.io.Reader;
  
  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 sqlSB.toString();
    }
  
    public static void main(String args[])//自己替換[]
    {
      try
      {
         String query = args[0];//自己替換[]
         HQLParser parser = new HQLParser(query);
      parser.parse();
         System.out.println("SQL:"+parser.getSQL());
      }
      catch(Exception e)
      {
         e.printStackTrace();
      }
    }
  
    public void parse()
    {
  try
  {
     expression();
  }
  catch(Exception e)
      {
        e.printStackTrace();
      }
    }
  }
  PARSER_END(HQLParser)
  
  
  接下來到dos下輸入:
  引用:
  
  javacc -debug_parser test.jj
  
  -debug_parser:用來輸出語法樹
  
  
  這時候會生成7個java文件,每個文件的作用以后會具體說明
  
  這時候只需要
  
  javac *.java即可編譯全部的java文件
  
  然后執行java HQLParser “from Teacher“
  
  這時候屏幕上就會顯示出“select * from Teacher“

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静宁县| 介休市| 庆云县| 九江市| 黔西县| 武定县| 叙永县| 曲松县| 龙江县| 沂南县| 宜春市| 抚远县| 西宁市| 嘉黎县| 叶城县| 乌鲁木齐市| 安多县| 大庆市| 郯城县| 揭阳市| 二手房| 阜阳市| 台北市| 沙河市| 新巴尔虎左旗| 安图县| 攀枝花市| 柳州市| 无锡市| 临夏县| 喀喇| 宝丰县| 无极县| 衡阳县| 台湾省| 绥江县| 张掖市| 连云港市| 且末县| 东兰县| 绥棱县|