我想在flex中编写一个与以下内容等效的规则: symbol = lowercase | digit |其他。 我定义了这些规则:
SYMBOL {LOWERCASE}|{DIGIT}|{OTHER}
ALPHABET SYMBOL+
LOWERCASE [a-z]
DIGIT [0-9]
OTHER [!#$%-./:;<>=?@\[\]^'~]
%%
/* SYMBOL */
SYMBOL {
printf("Symbol found: %s",yytext);
}
%%
如果输入是&#34; something123。&#34;它没有被解析。 即使我在OTHER之后定义符号,也无法识别符号。
如果我更改代码:
SYMBOL {LOWERCASE}|{DIGIT}|{OTHER}
ALPHABET SYMBOL+
LOWERCASE [a-z]
DIGIT [0-9]
OTHER [!#$%-./:;<>=?@\[\]^'~]
%%
/* SYMBOL */
{LOWERCASE}|{DIGIT}|{OTHER} {
printf("Symbol found: %s",yytext);
}
%%
它有效。 难道不能用{LOWERCASE} | {DIGIT} | {OTHER}替换符号吗? [类似于C的定义]
LE: 问题解决了: %%之间的一些规则%% flex正在搜索完全匹配。所以它搜索SYMBOL就像一个简单的单词而不是模式SYMBOL。解决方案(指定模式):用{SYMBOL}替换SYMBOL。 所以现在它起作用了:
SYMBOL {LOWERCASE}|{DIGIT}|{OTHER}
ALPHABET SYMBOL+
LOWERCASE [a-z]
DIGIT [0-9]
OTHER [!#$%-./:;<>=?@\[\]^'~]
%%
/* SYMBOL */
{SYMBOL} {
printf("Symbol found: %s",yytext);
}
答案 0 :(得分:0)
(通过复制和粘贴来回答社区Wiki以关闭问题:Question with no answers, but issue solved in the comments (or extended in chat))
LE:问题解决了:%%之间的某些规则%% flex正在搜索完全匹配。所以它搜索SYMBOL就像一个简单的单词而不是模式SYMBOL。解决方案(指定模式):用{SYMBOL}替换SYMBOL。所以现在它起作用了:
SYMBOL {LOWERCASE}|{DIGIT}|{OTHER}
ALPHABET SYMBOL+
LOWERCASE [a-z]
DIGIT [0-9]
OTHER [!#$%-./:;<>=?@\[\]^'~]
%%
/* SYMBOL */
{SYMBOL} {
printf("Symbol found: %s",yytext);
}