2016-10-26 36 views
0

考慮下面的例子輸入:如何解析嵌入SQL中ANTLR4

namespace Client 
{ 
    sql FindByQuery 
    { 
     SELECT * FROM client_Profile 
     WHERE 1 = 1 

     #ifNotEmpty(City, sql{ AND `City` = @City }) 
     #ifNotEmpty(Zipcode, sql{ AND `Zipcode` = @Zipcode }) 

     #ifNotEqual(State, "NY", sql{ AND `State` = @State }) 
     #ifEqual(IsReactive, 1 , sql{ AND `WONum` LIKE CONCAT('B%', @WONum) }) 

     #include(CommonOrderBy) 
    } 
} 

有在代碼中兩個獨立的語言:

  1. 任何原始文本,包括空格,只要不以「#開頭'並以'}'結尾(SQL語句)
  2. 我的控制塊(名稱空間/ sql)和宏('#....')。

如何解析內部SQL語句爲原始文本並處理宏以'#'開頭正確?

或者是否有任何例子?

+0

你到目前爲止嘗試過的任何東西? – cantSleepNow

+0

通過使用ANTLR4詞法分析器模式,我成功解析了它。 – user2905258

+0

好,所以也許可以添加答案然後接受,所以大家都知道這個問題是回答。 – cantSleepNow

回答

0

ANTLR4詞法分析器模式可以做到這一點,它意味着創建一個單獨的詞法分析器g4文件,定義兩種模式:DEFAULT模式和SQL模式。

「sql FindByQuery」語句推送到SQL模式,並且「}」彈出回到默認模式。

在這兩個單獨的ANTLR4模式中,詞法分析器可能完全不同。