Проблема парсера - Else-If и объявление функции - PullRequest
0 голосов
/ 25 мая 2010

Быстрый, забавный вопрос - Чем отличается объявление функции в C / C ++ от блока операторов else-if с точки зрения чисто анализа ?

void function_name(arguments) {
  [statement-block]
}

else if(arguments) {
  [statement-block]
}

В поисках лучшего решения! =)

Редактировать: Спасибо за понимание, ребята. Я на самом деле писал регулярное выражение для соответствия всем функциям в программе, и я начал получать эти блоки else-if с результатами. Именно тогда я осознал уникальную связь между ними. =)

Ответы [ 2 ]

3 голосов
/ 25 мая 2010

Для чего зарезервированы ключевые слова, а именно else и if.

Объявления функций начинаются с типа, и поэтому анализатор должен убедиться, что никогда не будет выражения типа, такого как else или if.

2 голосов
/ 25 мая 2010

Два на самом деле совершенно разные.

Функция следует шаблону:

return-type function([argument1, argument2... argumentN]) // arguments optional
{
    [statement-block]
}

С другой стороны, else-if, то, как вы написали его в стиле C, является особым случаем одного блока else оператора. Точно так же, как вы можете иметь одно утверждение под другим, когда фигурные скобки опущены:

if (boolean-condition)
    // ...
else
    single-statement;

Допускается также использование одного оператора if-else:

if (boolean-condition)
    // ...
else
    if (boolean-condition)
    {
        // ...
    }

чаще пишется так, как вы (else if (...)).

Кроме того, нет списка параметров, только обязательное логическое условие, и в else if нет типа возврата. Итак, одно из определений подпрограммы, а другое - это два условных блока, соединенных вместе - между ними нет ничего особенного. Это хороший пример того, почему регулярное выражение нельзя использовать для разбора C ++ / HTML / XML / чего-либо со сложной грамматикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...