【发布时间】:2013-03-11 03:23:48
【问题描述】:
我在使用 flex 设置正则表达式以匹配类似 C 的文字字符时遇到了一些麻烦。
我需要根据语法匹配正确的文字字符和不正确的文字字符,例如未终止的字符文字。
2 条规则,一条用于正确规则,一条用于未终止规则。
chrlit (\')([^\\\'\n]|(\\.))(\')
untermchrlit (\')([\\|\']|(.))*
我需要关于正则表达式的帮助,因为它们没有按我的需要工作。下面是一些示例,它们应该如何工作:
' -> unterminated char constant
'/' -> CHRLIT('/')
'(' -> CHRLIT('(')
'a"b"c"de -> unterminated char constant
'abc -> unterminated char constant
'abc\ -> unterminated char constant
'\\' -> CHRLIT('\\')
';' -> CHRLIT(';')
'' -> unterminated char constant
'a' -> CHRLIT('a')
'\' -> unterminated char constant
'\;' -> CHRLIT('\;')
'\\\' -> unterminated char constant
'\\\ -> unterminated char constant
'\/' -> CHRLIT('\/')
'a\' -> unterminated char constant
'\\ -> unterminated char constant
'\t' -> CHRLIT('\t')
【问题讨论】:
-
@MikeM 这是一个字符文字,所以只有一个字符。我有另一条规则来匹配多字符常量,因此它们会给出错误,但我认为它与问题无关;)
-
@MikeM 我的 untermchrlit 在 '\'、'a\'、''' 和其他一些情况下都失败了。它给了我奇怪的结果..
-
@MikeM 怎么做?
标签: regex cygwin expression flex-lexer