捕获错误并继续返回调用函数

时间:2018-02-02 17:51:52

标签: c++ c regex flex-lexer lex

我正在使用flex / lex工具中的decaf语言构建一个scanner / lexical_analyser。

要检查标识符,我实现了正则表达式id [A-Za-z][A-Za-z0-9_]*

{id} { matchedID(); return T_Identifier; }

我也想检查错误的标识符,所以我写了一个方法来处理它:

    * Checking ID validness */
static void matchedID()
{
  strncpy(yylval.identifier,yytext,MaxIdentLen);
  if (yyleng > MaxIdentLen)
  {
    ReportError::LongIdentifier(&yylloc,yytext);
    return;
  }
}

现在,当我在包含以下内容的test_file上运行扫描程序时,

vari.able3variablevariable/123var-123variable_whose_name_is_much_too_long

扫描程序转义检查所有变量并报告有关上一个长变量的错误(decaf var max_size_is 31因此它会相应地截断它)。 如果我取出长名称的变量,扫描仪会完全扫描文件的其余部分! 任何人都可以告诉我如何解决它,所以当扫描仪找到一个长变量并报告错误时,它还应该扫描文件中的其他语句?

1 个答案:

答案 0 :(得分:0)

所以我注意到扫描程序脚本不能与我的服务器同步,我所做的更改只是客户端的本地更改,一旦服务器开始与客户端文件同步,一切都开始像魅力一样。

我想删除我的问题,但后来我认为其他人可能在将来遇到同样的问题:)