簡體   English   中英

從AST中提取信息

[英]Extracting information from AST

我正在嘗試使用ANTLR從PLSQL文件中提取信息。 我正在使用porcelli PLSQL語法,使用ANTLR在我的輸入plsql文件上吐出AST。 我需要閱讀返回的“ CommonTree”類(代表AST)並獲得不同的信息-說表和相關列的名稱。 我在想,使用訪問者模式來收集有關特定表的表和相關列的信息是否有意義。 例如,這樣的查詢

SELECT s.name from students s, departments d WHERE d.did=10 and s.sid=d.did

將在AST中顯示為

AST

在這里獲取表名和相關列將涉及首先從FROM元素捕獲別名,然后與SELECT_LIST中使用的列匹配。 有關表和列的信息隱藏在重復使用的元素(如“ ANY_ELEMENT”)下的葉節點深處。

那么,如何在這里使用訪客模式? 由於元素類型可能很多,我最終會導致訪問者太多嗎? 訪客模式在這里相關嗎?

編輯

在考慮了一段時間之后,我得出一個結論,在這種情況下,訪問者模式沒有意義。 鑒於需要訪問的數據結構是一棵樹,並且可能存在太多的節點類型(選擇,更新,插入,刪除,從何處,到……),定義了訪問這些節點時應發生的事情任何給定訪問者的節點類型可能會導致每個訪問者類有數百種方法!

在上一次編輯中更新時,我通過不實現訪客模式來解決此問題,因為這種模式將需要我創建所有節點類型,而對於PL / SQL,將會有太多的節點類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM