我想解析MS的SQL方言。根據規範一個「頂部」必須具有括號圍繞其表達antlr4詞法分析器/解析器衝突由於歧義
選擇頂部(@rows * 2)的a,b,從C ...
但作爲一個例外,這些可以被省略,如果的值是一個無符號的整數字面,從而
選擇頂部75的a,b,從C ...
我試圖嵌入在我的解析器(鬆散地)本字面整數特例:
top_clause:'TOP'[0-9] + | 'TOP''('表達')';
所以第一個選擇是純粹的詞法分析規則,第二個是解析器規則。由於整數常量是一個有效的表達式,因此它選擇將其解析爲一個表達式。
問題是,1)我可以強制它作爲詞法分析規則進行匹配嗎?2)最重要的是,我應該嗎?我的猜測是我不應該 - 這是一個公然的含糊(真的,在我的語法錯誤),我想我應該匹配它作爲一個純粹的解析器規則(只是「TOP」表達式),並對其進行排序退出後。 建議歡迎。
編輯:根據Matt Timmermans的觀點修正。
你不想'TOP'[0-9] + | 'TOP''('表達')''? –
那麼,表達式已經被定義爲**'('expression')'**,並且因爲我期望刪除詞法分析器規則,所以我在這裏跳過了它們(因爲我不想如果表達式的其餘部分只是一個整數,則需要它們)。但是,是的,你是對的。將編輯。 – user3779002
現在它不含糊 –