Где я могу получить лексический анализатор, способный сообщать об ошибках цикла в C или C ++? - PullRequest
0 голосов
/ 10 июня 2009

Мне нужен простой лексический анализатор, который сообщает об ошибках цикла в C / C ++.

Ответы [ 4 ]

2 голосов
/ 10 июня 2009

Я подозреваю, что вам нужен не лексический анализатор, который просто смотрит на отдельные токены и является частью компилятора, а скорее статический анализатор, который смотрит на код и может предложить потенциальные ошибки. Проверьте эти вопросы:

2 голосов
/ 10 июня 2009

Компилятор будет очень громко жаловаться, если вы напишите недопустимый цикл for:

for (int i)

получит большую громкую ошибку на каждом компиляторе на рынке.

Однако многие «ошибки» цикла вполне законны.

Я предполагаю, что вы пытаетесь пометить допустимые циклы, которые не означают того, что вы хотите, чтобы они имели в виду. Проблема, конечно, в том, что компилятор не может понять, что вы имеете в виду . Вы можете на законных основаниях пропустить любую из трех частей цикла, и обычно все три части пропустить. Кроме того, вы можете сделать более чем одну вещь в каждой части:

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.

0 голосов
/ 10 июня 2009

Для чисто лексического анализа вы можете использовать регулярные выражения или любой из десятков генераторов сканера (flex / lex, ANTLR). С другой стороны, для синтаксического анализа вам, вероятно, понадобится генератор синтаксического анализатора, который может читать не зависящую от контекста грамматику. Однако, насколько я понимаю, большинство синтаксических анализаторов C ++ написаны от руки. Я не уверен, что даже LALR-парсер сработает; вам, возможно, понадобится вывести большие пушки и использовать что-то вроде поддержки Бизона GLR. Кроме того, для более подробной информации о лексическом / синтаксическом анализе я бы порекомендовал «Книга Дракона» . Удачи!

0 голосов
/ 10 июня 2009

flex / lex и bison / yacc - два хороших инструмента для разработки таких вещей. Отчет об ошибках цикла может показаться очень специфической вещью, которая вам нужна, поэтому вам, возможно, придется написать свой собственный лексер и анализатор, чтобы он делал то, что вы хотите.

Руководство Бизона довольно всеобъемлющее.

С учетом сказанного, почему бы просто не использовать сообщения об ошибках вашего компилятора, чтобы узнать, правильно ли вы написали цикл for?

...