簡體   English   中英

antlr 詞法分析器和解析器的轉義字符

[英]Escape characters for an antlr lexer and parser

我是 antlr 的新手並希望構建一個解析器,其中一部分需要我匹配字符串,但是我希望保留轉義字符的含義

\0, \b, \t, \n, \f, \r, \", \', \\

其中一些符號在我的語言位置的語法中以各種方式使用,因此我希望通過以下方式定義一個 ESCAPE_CHAR 標記:

SINGLE_QUOTE: '\'' ;
DOUBLE_QUOTE: '"' ;
ESCAPE_ZERO : '\0' ;
ESCAPE_BACKSPACE : '\b' ;
ESCAPE_TAB : '\t' ;
ESCAPE_NEWLINE : '\n' ;
ESCAPE_FORMFEED : '\f' ;
ESCAPE_CARRIAGERETURN : '\r' ;
ESCAPE_BACKSLASH : '\\' ;
ESCAPE_CHAR: ESCAPE_ZERO | ESCAPE_BACKSPACE | ESCAPE_TAB | ESCAPE_NEWLINE | ESCAPE_FORMFEED | ESCAPE_CARRIAGERETURN | DOUBLE_QUOTE | SINGLE_QUOTE | ESCAPE_BACKSLASH ;

但是,ESCAPE_ZERO 給了我警告

non-fragment lexer rule ESCAPE_CHAR can match the empty string

當使 ESCAPE_ZERO 成為片段時,我看到了警告

invalid escape sequence \0

我是 antlr 的新手,所以我真的不知道我需要做些什么改變,任何幫助將不勝感激

您還需要在 ANTLR 中轉義文字中的\ 如果你不這樣做,詞法分析器規則ESCAPE_ZERO: '\0'; 匹配 null 字符而不是后跟零位的反斜杠。 而這個 null 字符沒有“寬度”,這會導致 ANTLR 產生錯誤[...] can match the empty string

而不是所有單獨的規則,嘗試這樣的事情:

STRING
 : '"' ( ~[\\"\r\n] | ESCAPE_CHAR )* '"'
 ;

fragment ESCAPE_CHAR
 : '\\' [0btnfr"'\\]
 ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM