1
時,當我用我的Antlr定義的語言我,只要我輸入第一個引號(「)得到一個錯誤我的Java編輯器類型的字符串ANTLR的錯誤輸入字符串
輸入:
StatusString = ";
break;
錯誤:
java.lang.IllegalStateException: Lexer [email protected]
returned null token but lexerInput.readLength()=21
lexer-state: null
tokenStartOffset=557, readOffset=578, lookaheadOffset=579
Chars: "";\n break;\n}\n\n" - these characters need to be tokenized.
Fix the lexer to not return null token in this state.
我懷疑這是因爲我如何定義我的字符串文字在我的GRA mmer。
語法定義
STRING_LITERAL
: '"' (EscapeSequence | ~('\\'|'"'))* '"' {setText(getText().substring(1, getText().length()-1));}
;
fragment
EscapeSequence
: '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
| OctalEscape
;
我懷疑所發生的事情是,一旦它看到第一個報價是試圖提取的字符串。這是實時完成的,因爲它是一個使用詞法分析器對語法進行顏色編碼的IDE。有什麼我可以用我的語法來防止這個錯誤嗎?
編輯:我在想的是讓它檢查到行尾。 IDE將只從報價開始爲行輸入橙色,直到用戶完成報價爲止,如netbeans或eclipse。我只是不知道如何去通過語法,所以它反映在詞法分析器/解析器
我想這樣做的什麼是有它檢查到該行的末尾。 IDE會從報價開始着色橙色行,直到報價完成,如netbeans或eclipse。我只是不知道如何去通過這個語法所以它體現在詞法分析器/分析器 – merjr 2012-07-10 19:54:56
@merjr,再次:我沒有在語法做到這一點,但在某些方面的IDE。 – 2012-07-10 20:03:14
我的字符串文字聲明是正確的,至少?該錯誤是扔我了,因爲在技術上它找到另一個「進一步代碼,以便爲這一個實例它實際上完成的字符串,但仍發生這個錯誤。 – merjr 2012-07-10 20:47:01