在我的flex程序中,我无法使用任何这些正则表达式。其中任何一个的使用都会产生unrecognized rule错误。
%{
#include<stdio.h>
%}
%option nodefault
%option noyywrap
%option outfile="scanner.c"
%%
(?i:a) printf("rule1");
(?s:.) printf("rule2");
(?x:a b) printf("rule3");
(?#foo) printf("rule4");
[a-z]{-}[aeiou] printf("rule5");
%%所有这些都在这文档中得到了很好的定义。我很困惑,我是不是用错了flex变体!我使用的是带有GnuWin32 flex v2.5.4的windows机器。
这是正在生成的错误:
$flex misc/test_lexer.l
"misc/test_lexer.l", line 11: unrecognized rule
"misc/test_lexer.l", line 11: unrecognized rule
"misc/test_lexer.l", line 11: unrecognized rule
"misc/test_lexer.l", line 11: unrecognized rule
"misc/test_lexer.l", line 11: unrecognized rule
"misc/test_lexer.l", line 11: unrecognized rule
"misc/test_lexer.l", line 13: unrecognized rule
"misc/test_lexer.l", line 13: unrecognized rule
"misc/test_lexer.l", line 13: unrecognized rule
"misc/test_lexer.l", line 13: unrecognized rule
"misc/test_lexer.l", line 13: unrecognized rule
"misc/test_lexer.l", line 13: unrecognized rule
"misc/test_lexer.l", line 15: unrecognized rule
"misc/test_lexer.l", line 15: unrecognized rule
"misc/test_lexer.l", line 15: unrecognized rule
"misc/test_lexer.l", line 15: unrecognized rule
"misc/test_lexer.l", line 15: unrecognized rule
"misc/test_lexer.l", line 17: unrecognized rule
"misc/test_lexer.l", line 17: unrecognized rule
"misc/test_lexer.l", line 17: unrecognized rule
"misc/test_lexer.l", line 17: unrecognized rule
"misc/test_lexer.l", line 17: unrecognized rule
"misc/test_lexer.l", line 17: unrecognized rule
"misc/test_lexer.l", line 17: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule
"misc/test_lexer.l", line 19: unrecognized rule发布于 2022-01-01 16:56:27
如果要使用这些构造,则需要更新flex安装。
Flex2.5.4是25年前发布的,它没有实现{-},也没有实现任何(?:...)语法。
您引用的手册也不是当前版本,它指定:
这个版本的flex手动文档的flex版本为2.6.3。最后一次更新是在2017年1月13日。
Flex v2.5.4确实实现了/尾随上下文操作符,这个操作符在这个问题的原始版本中。但是请注意,/不能在括号内使用,而且由于flex通常在宏展开周围添加括号,所以/也不能用于宏展开。
https://stackoverflow.com/questions/70549254
复制相似问题