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));
}
}
;
的樣本數據:
- 「」 - >拋出錯誤 「非法空引號」!
- 「ASD - >拋出錯誤 」缺少結束雙引號「
- 」發短信!「 - >返回文本(有效輸入,內容」 ...「)
通過查看您的規則,我不清楚您打算與「DOUBLE_QUOTED_CHARACTERS」匹配的內容。你能給一些有效的輸入例子嗎? – 2014-10-17 07:11:17
我編輯了我的問題並添加了一些示例。 – Adrian 2014-10-17 11:06:07