【发布时间】:2017-01-13 20:51:17
【问题描述】:
在我的作业中,我对字符串词法分析器有以下描述:
"字符串字面量包含零个或多个用双精度括起来的字符 引号 (")。使用转义序列(如下所列)表示特殊 字符串中的字符。这是新行的编译时错误 或 EOF 字符出现在字符串文字中。
所有支持的转义序列如下:
\b 退格
\f 换页
\r 回车
\n 换行
\t 水平制表符
\" 双引号
\反斜杠
以下是字符串字面量的有效示例:
"这是一个包含制表符\t的字符串"
“他问我:“约翰在哪里?””
字符串文字具有字符串类型。"
这是我的字符串词法分析器:
STRINGLIT: '"'(('\\'('b'|'t'|'n'|'f'|'r'|'\"'|'\\'))|~('\n'))*'"';
任何人都可以检查我的词法分析器是否符合要求?如果不是,请告诉我您的更正,我不太了解要求和ANTLR4。
【问题讨论】:
-
我不知道 ANTLR,所以我不会发布实际答案。但请记住,正则表达式通常是“贪婪的”,并且会尽可能多地匹配。这意味着如果您的 STRINGLIT 被输入
"this is a test" + "foo bar baz"它将匹配 整个 输入,而不仅仅是第一个引用的字符串。您需要从字符串中可能出现的字符中排除"(转义时除外)。 -
@JEarls ty,你的回答对我帮助很大
标签: regex string antlr antlr4 lexer