词法分析时如何检测字符串?

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

我正在使用一些语法在词法分析期间检测字符串

"".*""    return TOK_STRING; 

但这不起作用。

c flex-lexer
2个回答
1
投票

我想你想要

\".*\"

但请注意,flex 中的 . 不匹配换行符。而且,正如 @chqrlie 在评论中提到的,它确实匹配,因此它将匹配最后一个字符串的末尾,而不是当前字符串的末尾。

所以更好的模式可能是:

\"[^"]*\"

[^"]
匹配包括换行符在内的任何字符,除了 " 之外)。

但是你无法在字符串中包含 " 。所以你必须决定应该采用什么语法。如果你想实现 SQL 风格,用双引号代表字符串中的单引号,你可以使用

\"([^"]|\"\")*\"

对于可能更常见的反斜杠转义:

\"([^"]|\\(.|\n))*\"

0
投票

你想要这个:

"(".*")|(".*)"

一旦词法分析器到达第一个引号,这将开始匹配字符串,然后一旦词法分析器到达第二个引号,它将停止匹配字符串。它还神奇地忽略字符串中的任何转义引号。

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