日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql解释器_atitit.java解析sql语言解析器解释器的实现

發布時間:2024/1/23 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql解释器_atitit.java解析sql语言解析器解释器的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

atitit.java解析sql語言解析器解釋器的實現 1. 解析sql的本質:實現一個4gl dsl編程語言的編譯器 1 2. 解析sql的主要的流程,詞法分析,而后進行語法分析,語義分析,構建sql的AST 1 3. 詞法分析器 2 4. 語法分析器--ANTLR 2 5. Eclipse插件,,ANTLR Studio 3 6.

atitit.java解析sql語言解析器解釋器的實現

1. 解析sql的本質:實現一個4gl dsl編程語言的編譯器 1

2. 解析sql的主要的流程,詞法分析,而后進行語法分析,語義分析,構建sql的AST 1

3. 詞法分析器 2

4. 語法分析器--ANTLR 2

5. Eclipse插件,,ANTLR Studio 3

6. 一個基于javacc實現的解析器JSqlParser0.7(yr2011), 3

7. 例子代碼-----解析sql表格列的名稱and類型 3

8. }Sql的歷史 4

9. 解析select語句 4

10. zql,JSqlParser,General sql parser. 5

11. ANTLR實現的SQL解析器 - OQL 5

12. Javacc/AST簡單的介紹 5

13. SQLJEP http://sqljep.sourceforge.net/ 5

14. Sql生成SqlBuilder ,Querydsl ,hb 6

15. 俄的總結: 還湊火JSqlParser0.7走行蘭. 6

16. 參考 6

1. 解析sql的本質:實現一個4gl dsl編程語言的編譯器

Sql走十一個4gl dsl,..SQL解析器基本上走十一個編譯器實現

2. 解析sql的主要的流程,詞法分析,而后進行語法分析,語義分析,構建sql的AST

首先要進行詞法分析,而后進行語法分析,語義分析

詞法分析,and 語法分析>>>.

詞法分析即將輸入的語句進行分詞(token),解析出每個token的意義。分詞的本質便是正則表達式的匹配過程,比較流行的分詞工具應該是lex,通 過簡單的規則制定,來實現分詞。Lex一般和yacc結合使用。關于lex和yacc的基礎知識請參考Yacc 與Lex 快速入門- IBM。如果想深入學習的話,可以看下《LEX與YACC》。

然而Mysql并沒有使用lex來實現詞法分析,但是語法分析卻用了yacc,而yacc需要詞法分析函數yylex,

不過ANTLR更多簡化...

作者:: 老哇的爪子 Attilax 艾龍, EMAIL:1466519819@qq.com

轉載請注明來源: http://blog.csdn.net/attilax

3. 詞法分析器

MySQL的詞法分析器是手工打造的。

語法分析器的入口函數是MYSQLparse,詞法分析器的入口函數是MYSQLlex。

2. 詞法分析中會檢查token是否為關鍵字。

最直接的做法是弄個大的關鍵字數組,進行折半查找

1.1 詞法分析器(Lexer)

詞法分析器又稱為 Scanner,Lexical analyser和Tokenizer。程序設計語言通常由關鍵字和嚴格定義的語法結構組成。編譯的最終目的是將程序設計語言的高層指令翻譯成物力機器或 虛擬機可以執行的指令。此法分析器的工作是分析量化那些本來毫無意義的字符流,將他們翻譯成離散的字符組(也就是一個一個的Token)括關鍵字,標識 符,符號(symbols)和操作符供語法分析器使用。

,Lexer不關心所生成的單個Token的語法意義及其與上下文之間的關系

ANTLR將上述兩者結合起來,它允許我們定義識別字符流的詞法規則和用于解釋Token流的詞法分析規則。然后,ANTLR將根據用戶提供的語法文件自 動生成相應的詞法/語法分析器。

4. 語法分析器--ANTLR

也因為不想和以下推自動機為原理的YACC/LEX生成的一大堆整數表打交道,我選擇了另一個開源的LL(K)語法/詞法分析器—ANTLR。

之前YACC/LEX顯得過于學院派,而以LL(k)為基礎的ANTLR雖然在效率上還略有不足

Lexer不關心所生成的單個Token的語法意義及其與上下文之間的關系,而這就是Parser的工作。語法分析器將收到的Tokens組織起來,并轉換成為目標語言語法定義所允許的序列。

無論是Lexer還是Parser都是一種識別器,Lexer是字符序列識別器而Parser是Token序列識別器。他們在本質上是類似的東西,而只是在分工上有所不同而已。

ANTLR將上述兩者結合起來,它允許我們定義識別字符流的詞法規則和用于解釋Token流的詞法分析規則。然后,ANTLR將根據用戶提供的語法文件自 動生成相應的詞法/語法分析器。用戶可以利用他們將輸入的文本進行編譯,并轉換成其他形式(如AST—Abstract Syntax Tree,抽象的語法樹)。構建sql的AST

5. Eclipse插件,,ANTLR Studio

為了更好的使用ANTLR,你還可以下載ANTLR的Eclipse插件來幫助你完成工作。ANTLR Studio

6. 一個基于javacc實現的解析器JSqlParser0.7(yr2011),

它可以把SQL語句轉換為Java對象,由于JsqlParser是使用JavaCC做語法分析的,而本身JavaCC就支持JJTree...如是就寫了個小工具SQLParser,將生成的對象以樹的形式呈現出來^

JSqlParser存在的問題及解決

JSqlParser是一個SQL語句的解析器,包括常用的一些SQL語句,insert,update,select,delete等,但兼容的語法有限,比如括號,或者一些復雜的結構等。 對于轉義字符的處理

7. 例子代碼-----解析sql表格列的名稱and類型

final String sql = filex.read("c:\\pojo.sql", "gbk");

new SqlParseO7(sql)

this.sqlParseO7.parse(new Closure()

public void parse(Closure c) throws JSQLParserException {

CCJSqlParserManager parserManager = new CCJSqlParserManager();

// String statement =

// "CREATE TABLE mytab (mycol a (10, 20) c nm g, mycol2 mypar1 mypar2 (23,323,3) asdf ('23','123') dasd, "

// + "PRIMARY KEY (mycol2, mycol)) type = myisam";

CreateTable createTable = (CreateTable) parserManager

.parse(new StringReader(this.sql));

List columnDefinitions = createTable.getColumnDefinitions();

String tabName = createTable.getTable().getName();

// System.out.println(columnDefinitions.size());// 獲得字段總數.

for (Object object : columnDefinitions) {

ColumnDefinition col = (ColumnDefinition) object;

Object[] oa = { col.getColumnName(),

col.getColDataType().getDataType(), tabName };

c.execute(oa);

}

8. }Sql的歷史

9. 解析select語句

Statement stat = new CCJSqlParserManager().parse(new StringReader(

"select * from a where 姓名='崔永遠'"));

Select select = (Select) stat;

Expression where = ((PlainSelect) select.getSelectBody()).getWhere();

WhereExpressionVisitor visitor = new WhereExpressionVisitor(rowMeta, where);

for (int i = 0; i < data.length; i++) {

Object result = visitor.eval(data[i]);

if (result instanceof Boolean && ((Boolean) result).booleanValue()) {

System.out.print("通過=====>");

} else {

System.out.print("不通過=====>");

}

System.out.println(StringUtils.join(data[i], ","));

}

10. zql,JSqlParser,General sql parser.

11. ANTLR實現的SQL解析器 - OQL

12. Javacc/AST簡單的介紹

JavaCC 是一個代碼生成器,可以根據輸入的語言定義輸出一個詞法分析器和解析器,JavaCC 輸出的代碼是合法的可編譯Java代碼.解析器和詞法分析器本身就是一個冗長而復雜的組件,手工編寫一個這樣的程序需要仔細考慮各條件的相互作用,總的來說,通過javacc完成一些字符串的分析,還是比較方便,現在普遍使用AST了。

13. SQLJEP http://sqljep.sourceforge.net/

SQLJEP 是一個用來解析和仿真執行SQL語句的Java類庫。支持幾乎所有 Oracle 和 MaxDB 的函數。SQLJEP 使用 JavaCC 來做詞法分析。

14. Sql生成SqlBuilder ,Querydsl ,hb

3.SqlBuilder http://openhms.sourceforge.net/sqlbuilder/

SqlBuilder 是一個Java的類庫,它試圖幫你避免在Java程序內直接書寫SQL查詢的痛苦。你只需要使用 SqlBuilder 的方法,它就可以幫你生成對應的 SQL 數據庫查詢語句,例如下面一個SQL語句:

15. 俄的總結: 還湊火JSqlParser0.7走行蘭.

16. 參考

Java 實現對Sql語句解析 - 翠竹林 - 博客園.htm

SQL 語法解釋器jsqlparser - serv - ITeye技術網站.htm

Hibernate源代碼分析 - 青火的筆記 - 記筆記 - 私塾在線 - 只做精品視頻課程服務.htm

開源語法分析器--ANTLR - 薛笛的專欄 - 博客頻道 - CSDN.NET.htm

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的mysql解释器_atitit.java解析sql语言解析器解释器的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。