簡體   English   中英

在哪里可以找到能夠報告C或C ++中的循環錯誤的詞法分析器?

[英]Where might I obtain a lexical analyzer capable of reporting for-loop errors in C or C++?

我需要一個簡單的詞法分析器來報告C / C ++中的循環錯誤。

如果編寫非法的for循環,編譯器將大聲抱怨:

for (int i)

在市場上的每個編譯器上都會出現很大的錯誤。

但是,很多for循環的“錯誤”都是完全合法的。

我假設您正在嘗試標記合法的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 < 10 i <= 10

我懷疑您想要的不是一個僅查看單個標記並且是編譯器一部分的詞法分析器,而是一個靜態的分析器,其查看代碼並建議潛在的錯誤。 查看以下問題:

flex / lex和bison / yacc是開發此類工具的兩個很好的工具。 報告for循環錯誤似乎是您需要的非常具體的內容,因此您可能必須編寫自己的詞法分析器和解析器才能使其執行所需的操作。

野牛手冊非常全面。

這么說,為什么不僅僅使用編譯器的錯誤消息來查找是否編寫了for循環錯誤?

對於純詞法分析,您可以使用正則表達式或數十種掃描儀生成器(flex / lex,ANTLR)中的任何一個。 另一方面,對於語法分析,您可能需要一個解析器生成器,該生成器可以讀取上下文無關的語法。 但是,據我了解,大多數C ++解析器都是手寫的。 我不確定,即使是LALR解析器也能解決問題。 您可能需要拿出大手筆,並使用諸如Bison的GLR支持之類的工具。 另外,有關詞匯/句法分析的更多信息,我建議使用“ The Dragon Book” 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM