Flex - 新行无法识别

时间:2017-09-09 17:28:06

标签: c++ bison flex-lexer

我正在使用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问题,因为当我推送代码时,它就像魅力一样!

将欣赏每一个建设性的答案。

1 个答案:

答案 0 :(得分:0)

问题似乎是回车符号。如果您遇到类似问题,如果这样做无效,您应该检查其他不可打印的字符。

在我的案例中帮助:

DELIM       [ \t\r]

在我的解决方案中“删掉”DELIM,因此不会应用任何规则。