在我的 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.
這是正在生成的錯誤:
$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
uj5u.com熱心網友回復:
如果您想使用這些結構,您需要更新您的 flex 安裝。
25 多年前發布的 Flex 2.5.4 既沒有實作{-}也沒有實作任何(?:...)語法。
您參考的手冊(也不是當前版本)指定:
本版 flex 手冊記錄了 flex 2.6.3 版。最后更新于 2017 年 1 月 13 日。
Flex v2.5.4 確實實作了/尾隨背景關系運算子,這是在這個問題的原始版本中。但請注意,/不能在括號內使用,并且由于 flex 通常在宏擴展周圍添加括號,因此/也不能用于宏擴展。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401070.html
標籤:正则表达式 标记化 flex-lexer 莱克斯
上一篇:為什么javascript正則運算式/^abc/g不將“abc\nabc\n”與match(re).length計算為兩個?[復制]
