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

标签 c++ c regex flex-lexer lex

我正在使用 Flex/lex 工具中的 decaf 语言构建扫描仪/词法分析器。

为了检查标识符,我实现了正则表达式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 上运行扫描仪时:

变量.able, 3变量, 变量/123var-123variable_whose_name_is_much_too_long

扫描仪逃避检查所有变量并报告有关最后一个长变量的错误(decaf var max_size_is 31,因此它会相应地截断它)。 如果我取出长名称的变量,扫描仪将完美扫描文件的其余部分! 谁能告诉我如何修复它,以便当扫描器发现长变量并报告错误时,它还应该扫描文件中的其他语句?

最佳答案

所以我注意到,不知何故,扫描仪脚本没有与我的服务器同步,并且我所做的更改仅在客户端本地,一旦服务器开始与客户端文件同步,一切就开始恢复正常。

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

关于c++ - 捕获错误并继续返回调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48588315/

相关文章:

regex - 标签后首字母大写

php - 检查一个字符串是否是一个 URL

c++ - Hash Table 添加和打印功能问题

c++ - 理解令人困惑的 typedef 语法

r - 如何测试\是否在字符串中?

c - 具有分离线程的超时事件设计

c - fgets 不提示用户输入。有什么不同?

c++ - BST 的 C++ 回调函数和函数指针问题

c++ - 具有小对象优化的智能指针

c - 经历 APR 失败