ANTLR4 - 需要对此字符串文字进行解释

时间:2016-09-06 11:46:15

标签: regex string antlr antlr4 lexer

在我的任务中,我对String Lexer有这个描述:

  

"字符串文字由double括起来的零个或多个字符组成   引号(")。使用转义序列(下面列出)表示特殊   字符串中的字符。这是新行的编译时错误   或EOF字符出现在字符串文字中。

     

所有支持的转义序列如下:

     

\ b退格

     

\ f formfeed

     

\ r \ n回车

     

\ n换行

     

\ t水平标签

     

\"双引号

     

\ backslash

     

以下是字符串文字的有效示例:

     

"这是一个包含tab \ t"

的字符串      

"他问我:\"约翰在哪里?\""

     

字符串文字的类型为字符串。"

这是我的String lexer:

STRINGLIT: '"'(('\\'('b'|'t'|'n'|'f'|'r'|'\"'|'\\'))|~('\n'))*'"';

如果符合要求,有人可以检查我的词法分析器吗?如果不是,请告诉我你的更正,我不太了解这个要求和ANTLR4。

1 个答案:

答案 0 :(得分:0)

使用ANTLR4,您可以编写\\ ('b' | 't' | 'n')而不是编写\\ [btn]。此外,正如J Earls在评论中提到的那样,您希望在您的否定集中包含引号,以及\r和文字\

这应该是诀窍:

STRINGLIT
 : '"' ( '\\' [btnfr"'\\] | ~[\r\n\\"] )* '"'
 ;