2013-05-13 16 views
0

我需要一個解析器(主要用於「選擇」類型的查詢)並避免從頭開始的麻煩。有沒有人知道如何使用pgsql的scan.l/gram.y來達到這個目的?我也查了pgpool,但看起來很相似。目前,如果有人可以給出指令來編譯解析器(可能使用makefile)而沒有錯誤,這樣它可以被提供(有效的?)查詢並輸出解析樹(以任何形式)可能會非常有用!如何(如果可能)獨立使用PostgreSQL的解析器(在C中)?

+0

沒有錯誤?如果您發佈錯誤信息會有所幫助。 – 2013-05-13 11:46:20

+0

我試過在scan.l上運行flex,但輸出的c代碼甚至在修正頭文件問題後也不會編譯。部分隨後出現的錯誤爲: kandarpksk @ kandarpAspireRR:〜/ Documents/milestone_b $ gcc lex.core_yy.c -lfl 從scan.l包含的文件中:33:0: gram.y:161:2: error:unknown type name'core_YYSTYPE' gram.y:169:2:error:unknown type name'JoinType' gram.y:170:2:error:unknown type name'DropBehavior' – 2013-05-13 11:55:03

+0

使用Yacc? (另一個編譯器編譯器) – Neil 2013-05-13 11:23:26

回答

1

你可能不能從postgres源代碼包中取出任何文件並單獨編譯它。解析器使用內部OOP結構(用C實現)。但有一些可能性(並非簡單) - ecpg預處理器嘗試將PostgreSQL文件轉換爲輔助文件 - 並且可以使用相同的機制。它使用一個小型的實用程序parse.pl(它是PostgreSQL源代碼的一部分(src/postgresql/src/interfaces/ecpg/preproc))

+0

顯然,它已根據http://www.postgresql.org/message-id/[email protected]完成,但我無法弄清楚使用它(pgpool)或其來源。 – 2013-05-13 12:47:08

0

PostgreSQL使用yacc編譯語言分析程序。據推測,你可以採取yacc文件,並創建一個兼容的解析器,只需很少的努力。請注意,您必須安裝flex和yacc才能執行此操作。

請注意,這並不是從源代碼獲取.c文件,而是將其移植到您的系統中。你所得到的只是解析器,而不是規劃器或其他任何東西。

鑑於問題的詳細程度,可能不會有更多的細節。也許你可以從那裏開始並在卡住時發佈另一個問題。

相關問題