2014-10-16 66 views
4

我在我的ANTLR v3語法文件中定義了這個詞法分析器規則 - 它將數學文本放在雙引號中。 我需要將其轉換爲ANTLR v4。 ANTLR編譯器拋出一個錯誤'語法錯誤:錯誤的輸入'@'在匹配一個詞法分析規則時(在@init行中)期待COLON。詞法分析器規則是否可以包含@init塊?這應該如何重寫?ANTLR4詞法分析器規則與@init塊

DOUBLE_QUOTED_CHARACTERS 
@init 
{ 
    int doubleQuoteMark = input.mark(); 
    int semiColonPos = -1; 
} 
: ('"' WS* '"') => '"' WS* '"' { $channel = HIDDEN; } 
{ 
    RecognitionException re = new RecognitionException("Illegal empty quotes\"\"!", input); 
    reportError(re); 
} 
| '"' (options {greedy=false;}: ~('"'))+ 
    ('"'|';' { semiColonPos = input.index(); } ('\u0020'|'\t')* ('\n'|'\r')) 
{ 
    if (semiColonPos >= 0) 
    { 
     input.rewind(doubleQuoteMark); 

     RecognitionException re = new RecognitionException("Missing closing double quote!", input); 
     reportError(re); 
     input.consume();    
    } 
    else 
    { 
     setText(getText().substring(1, getText().length()-1)); 
    } 
} 
; 

的樣本數據:

  1. 「」 - >拋出錯誤 「非法空引號」!
  2. 「ASD - >拋出錯誤 」缺少結束雙引號「
  3. 」發短信!「 - >返回文本(有效輸入,內容」 ...「)
+0

通過查看您的規則,我不清楚您打算與「DOUBLE_QUOTED_CHARACTERS」匹配的內容。你能給一些有效的輸入例子嗎? – 2014-10-17 07:11:17

+0

我編輯了我的問題並添加了一些示例。 – Adrian 2014-10-17 11:06:07

回答

1

我在反駁這個問題的時候我的.g4語法導入了一個詞法分析器文件,導入語法文件似乎在ANTLR4中觸發了許多無證的缺點,所以最終我不得不停止使用導入。 g4文件)我的@input和@after解析錯誤消失了,我應該提交一個測試用例+ bug,至少要得到這個文檔,我會在這裏更新一次 我依稀記得關於impo的2-3個問題將詞法分析器語法放入我的解析器中,以觸發無證行爲。這裏覆蓋了大量的計算器。

相關問題