Flex:查看一行是否有任何内容的简单方法?

Flex: easy way to see if a line has any content?

在我的 Altair BASIC Flex 文件中的许多规则中,有一条是:

[\n]
{
    ++num_lines;
    ++num_statements;
    return '\n';
}

++statements; 实际上并不正确 - 理论上该行可能为空(例如,由于 .BAS 文件中的数据错误),因此该行上没有任何语句。那么有没有办法知道自上次\n之后\n前面是否有任何标记?我知道您可以使用 BEGIN() 等来完成此操作,但对于一个简单的问题来说,这似乎需要大量工作!有没有更简单的方法?

匹配空白行很容易,但我不确定这是否真的是您要查找的内容。

第一个模式匹配仅包含 space 和制表符的行(根据需要进行调整以匹配其他白色 space)。当第二个模式不在一行的开头时,它匹配相同的 whitespace 。 (实际上,它会在任何地方匹配 whitespace,但在一行的开头,第一个模式获胜。)

^[ \t]*\n ;
[ \t]*\n  { ++num_statements; return '\n'; }

我建议您使用 %option yylineno 而不是自己计算行数,这样 flex 会为您计算行数。 (在 yylineno.)