2014-04-17 39 views
0

我想匹配非空格字符,所以我定义的JFlex的柔性文件:如何在jflex(flex)词法分析器中使用“ S”?

%% 

Value = [\S]+ 

%% 

{Value} { return MyTokens.Value; } 
.   { return MyTokens.BadCharacter; } 

然后我尝试生成的Java代码来分析字符串“abc”,但我得到:

BadCharacter(a) 
BadCharacter(b) 
BadCharacter(c) 

如果我改变声明:

Value = [a-z]+ 

然后我就可以得到预期的结果:

Value(abc) 

为什么\S不工作?这不是指“非空白”吗?

+0

似乎'\ S'确实被jflex支持:http://jflex.de/manual.html ...仅供参考,虽然这可能不是问题的根源,但括号是多余的。 '\ S'可以(应该可以)单独使用。 – Robin

+0

我找到了原因:我使用的JFlex版本是'1.4',它不支持'\ s','\ S'。查看的更新日志。谢谢你们一样! – Freewind

回答

1

\S确实应该匹配非空白码点。

从手册:

HESE元字符等同于以下内容:
\ S \ p {}空白

编辑:我没有看到你已经回答的评论: \S被引入version 1.5

相关问题