解析器问题 - Else-If和函数声明

时间:2010-05-25 12:48:19

标签: c++ c parsing programming-languages

一个快速,有趣的问题 - C / C ++中的函数声明和纯解析立场中的else-if语句块之间有什么区别?

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

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

寻找最佳解决方案! =)

编辑:感谢有识之士。我实际上正在写一个正则表达式来匹配程序中的所有函数,我开始得到这些 - 如果块结果。那是我意识到两者之间的独特联系。 =)

2 个答案:

答案 0 :(得分:3)

关键字 - 即elseif - 保留给。

函数声明以类型开头,因此解析器必须确保永远不会有类似elseif的类型表达式。

答案 1 :(得分:2)

这两者实际上完全不同。

一个函数遵循以下模式:

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

另一方面,如果你用C风格编写它的方式,则是单个语句else块的特例。就像省略花括号时在else下可以有一个语句一样:

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

单个语句也可以是if-else语句:

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

通常以您的方式书写(else if (...))。

此外,没有参数列表,只是一个必需的布尔条件,并且else if中没有返回类型。所以一个是子程序的定义,另一个是链接在一起的两个条件块 - 没有什么特别连接这两个。这是一个很好的例子,为什么正则表达式不能用于解析C ++ / HTML / XML /具有复杂语法的任何东西。