我在哪里可以获得一个能够在C或C++中报告循环错误的词法分析器?

我在哪里可以获得一个能够在C或C++中报告循环错误的词法分析器?,c++,c,lexical-analysis,C++,C,Lexical Analysis,我需要一个简单的词法分析器来报告C/C++中的循环错误。/lex和/yacc是开发此类东西的两个好工具。报告循环错误似乎是您需要的一件非常具体的事情,因此您可能需要编写自己的lexer和解析器,让它实现您想要的功能 野牛是相当全面的 既然如此,为什么不直接使用编译器的错误消息来找出是否编写了for循环错误?对于纯粹的词法分析,您可以使用正则表达式或几十个扫描生成器flex/lex、ANTLR中的任意一个。另一方面,对于语法分析,您可能需要能够读取上下文无关语法的解析器生成器。但是,从我理解的,大

我需要一个简单的词法分析器来报告C/C++中的循环错误。

/lex和/yacc是开发此类东西的两个好工具。报告循环错误似乎是您需要的一件非常具体的事情,因此您可能需要编写自己的lexer和解析器,让它实现您想要的功能

野牛是相当全面的


既然如此,为什么不直接使用编译器的错误消息来找出是否编写了for循环错误?

对于纯粹的词法分析,您可以使用正则表达式或几十个扫描生成器flex/lex、ANTLR中的任意一个。另一方面,对于语法分析,您可能需要能够读取上下文无关语法的解析器生成器。但是,从我理解的,大多数C++解析器都是手写的。我不确定即使是LALR解析器也能做到这一点;您可能需要拿出大炮,使用类似Bison的GLR支持。另外,关于词汇/句法分析的更多信息,我推荐。祝你好运

如果你写了一个非法的for循环,编译器会大声抱怨:

for (int i)
市场上的每一个编译器都会出现一个巨大的错误

然而,许多for循环错误是完全合法的

我假设你试图为循环标记合法性,而这些循环并不意味着你想要它们的意思。当然,问题是。您可以合法地省略循环中的三个部分中的任何一个,并且通常省略所有三个部分。此外,您还可以在每个部分中执行多项操作:

for (int i = 0, MAX_ITERS = 20; ; ++i, --MAX_ITERS) {
    if (MAX_ITERS == 0 || i > MAX_ITERS)
        break;
    if (i % 2 == 0)
        continue;
    std::cout << i << ',' << MAX_ITERS << '\n';
}

当然,大多数循环错误对于编译器来说是完全不可能发现的,比如写i<10,当你的意思是i时,我怀疑你想要的不是一个只查看单个标记的词法分析器,它是编译器的一部分,而是一个静态分析器,它查看代码并能提示潜在的bug。查看以下问题:


我需要更多的细节来回答这个问题我需要一杯啤酒。嘿,现在是1640,还有20分钟。呜呼!:-澄清:你能澄清你的问题吗?事实上,我需要更多的猪排来理解这个问题。我开始使用c/c++构建一个简单的编译器/词法分析器代码,该代码报告循环错误