Flex - 无法识别新行
Flex - new line unrecognized
我正在做一个包含 Pascal 子集的项目。我的代码如下所示:
NLINE [\n]
BRACKET ['('|')']
%%
{BRACKET} {
std::cout << "Found BRACKET symbol " << yytext[0] << std::endl;
return yytext[0];
}
{NLINE} {
std::cout << "Found NEWLINE symbol " << yytext[0] << std::endl;
yylineno++;
}
...
. { // anything is exactly before EOF
std::cout << "Found ANYTHING " << yytext[0] << std::endl;
yylval = NONE;
return yytext[0];
}
我尝试了很多方法来解决这个问题,也只是用 \n 代替 [\n] 或 [ \n] 但没有达到预期的效果。下面是输出:
...
Found BRACKET symbol )
Found ANYTHING ;
Found ANYTHING << where in code should be \n
我知道这是 \n 问题,因为当我在没有它的情况下推送代码时,它就像一个魅力!
感谢每一个建设性的回答。
问题似乎是回车 return 符号。如果您遇到类似的问题,如果这没有帮助,您应该检查其他不可打印的字符。
在我的案例中帮助了:
DELIM [ \t\r]
DELIM 在我的解决方案中是 "eated",因此没有应用任何规则。
我正在做一个包含 Pascal 子集的项目。我的代码如下所示:
NLINE [\n]
BRACKET ['('|')']
%%
{BRACKET} {
std::cout << "Found BRACKET symbol " << yytext[0] << std::endl;
return yytext[0];
}
{NLINE} {
std::cout << "Found NEWLINE symbol " << yytext[0] << std::endl;
yylineno++;
}
...
. { // anything is exactly before EOF
std::cout << "Found ANYTHING " << yytext[0] << std::endl;
yylval = NONE;
return yytext[0];
}
我尝试了很多方法来解决这个问题,也只是用 \n 代替 [\n] 或 [ \n] 但没有达到预期的效果。下面是输出:
...
Found BRACKET symbol )
Found ANYTHING ;
Found ANYTHING << where in code should be \n
我知道这是 \n 问题,因为当我在没有它的情况下推送代码时,它就像一个魅力!
感谢每一个建设性的回答。
问题似乎是回车 return 符号。如果您遇到类似的问题,如果这没有帮助,您应该检查其他不可打印的字符。
在我的案例中帮助了:
DELIM [ \t\r]
DELIM 在我的解决方案中是 "eated",因此没有应用任何规则。