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

问题描述 投票:0回答:2

在我的作业中,我对字符串词法分析器有以下描述:

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

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

退格

换页

回车

换行

水平制表符

\" 双引号

\反斜杠

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

“这是一个包含制表符的字符串”

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

字符串文字具有字符串类型。”

这是我的字符串词法分析器:

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

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

regex string antlr antlr4 lexer
2个回答
0
投票

使用 ANTLR4,你可以写

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

这应该可以解决问题:

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

0
投票

试试这个:

QUOTE: '"';
STRINGLIT: QUOTE ( '\\' [bfrnt"\\] | ~[\b\f\r\n\t"\\] )* QUOTE
    {self.text = self.text[1:-1]};

此任务必须使用 ANTLR4 中的“action”,我们在 {} 括号中编写一种语言的代码。

© www.soinside.com 2019 - 2024. All rights reserved.