2015-09-16 17 views
0

解析使用ANLTR3的解析器時遇到問題。解析器無法解析包含在語法中聲明爲詞法分析規則的「任何詞」的命令。 對於實例來看看下面的語法:使用ANTLR3語法解析命令失敗,如果命令具有聲明爲規則的相同單詞

show : 
    SHOW TABLES '[' projectName? tableName']' -> ^(SHOW TABLES_ ^(PROJECT_NAME projectName)? ^(DATASET_TABLE tableName)); 

SHOW : S H O W; 

如果我嘗試解析命令「SHOW TABLES [示例項目:SHOW]」,那麼來解析該command.But失敗,如果我改變SHOW字,然後它的工作原理。 SHOW TABLES [sample-project:SHOW] - 這個工程。

我不希望得到的字符串類型這是在引號(「)所包圍。 任何人都可以提出解決方案嗎?我使用ANTLR3。

在此先感謝。

回答

1

這是一個典型使用保留字作爲標識符的效果在ANTLR中,當你定義一個保留字像你的SHOW規則時,它將隱含地從你可能已經定義的關鍵字規則之後定義的標識符規則中排除。規則中的標識符如tablName是爲了使該規則接受某些(或所有)可以在該位置接受的關鍵字(並且不會作爲關鍵字)。例如:

tableName: 
    IDENTIFIER 
    | SHOW 
    | <others go here> 
;