可重入的SQL解析器
文章目錄
- 可重入的SQL解析器
- 一、概述
- 二、可重入解析器
- 2.1 可重入設置
- 2.2 記錄狀態的數據結構
- 2.3 節點數據類型定義
- 2.4 頭文件引用
- 三、調整后的程序結構
- 四、總結
一、概述
現在就來修改之前sqlscanner.l和sqlgram.y程序,可以不斷輸入SQL語句,循環執行詞法分析和語法分析動作。
當前的解析器已經可以解析一條SQL語句了,真正的數據庫客戶端可以在前一條執行完后,再輸入SQL繼續執行。
在做這樣一個命令行的客戶端之前,需要對當前的解析器改造為可重入,可以反復用來解析不同的SQL語句。
在默認情況下,flex和bison的解析狀態定義為全局變量,重復執行時會繼續使用上一次的狀態,直到輸入CTRL+D時,才認為輸入結束,此時產生最終結果和清理過程中的狀態信息。
二、可重入解析器
現在就來修改之前sqlscanner.l和sqlgram.y程序,可以不斷輸入SQL語句,循環執行詞法分析和語法分析動作。
一個可重入的詞法分析器和語法分析器,它的中間狀態記錄不再使用內部全局變量,而是記錄到調用者初始化的數據結構當中,這樣調用者在輸入下一條SQL語句時,使用新