2017-09-04 78 views
0

所以,我對於字符串此詞法規則:操縱詞法規則的文本antlr4

STRINGLIT:「'(( '\'[\ 」bftrn])|〜[\ n \「 ])*''';

例如,輸入​​,我希望abc,<EOF>丟棄"

我讀到這裏http://www.antlr2.org/doc/lexer.html,您可以使用! operator。然後,我會有:

STRINGLIT:'''!((''''''''')'〜'['n'「])*'」'! ;

但是,我不能讓它在代碼上工作。

+0

剛剛獲得令牌的文本和自己剝去引號 - 畢竟,你會無論如何,都必須自己轉換像\ n這樣的東西。哦,不要指望v2文檔對於v4是準確的。許多事情已經改變。 –

回答

1

自v3(您正在使用v4)以來,不再支持!運算符的v2功能。

在v3或v4中沒有等效的操作符。剝去引號的唯一方法是在聽衆或訪問者在你的詞法分析器這樣做解析後,或嵌入目標特定代碼:

STRINGLIT 
: '"' (('\\' [\\bftrn"]) | ~[\\\r\n"])* '"' 
    { 
    // Get all the text that this rules matched 
    String matched = getText(); 

    // Strip the first and the last characters (the quotes) 
    String matchedWithoutQuotes = matched.substring(1, matched.length() - 1); 

    // possibly do some more replacements here like replace `\\n` with `\n` etc. 

    // Set the new string to this token 
    setText(matchedWithoutQuotes); 
    } 
; 
+0

哦哇,它的作品!但我沒有去學習那部分。你可以爲我做一些關於代碼的解釋嗎?我會非常感激。 –

+0

@PNguyen我在代碼中添加了更多評論:我認爲應該清除一些東西。 –

+0

非常感謝您的大力幫助! –