开发者

Parser problem - Else-If and a Function Declaration

开发者 https://www.devze.com 2023-01-01 10:58 出处:网络
A quick, fun question - What is the difference between a function declaration in C/C++ and an else-if statement block from a purely parsing standpoint?

A quick, fun question - What is the difference between a function declaration in C/C++ and an else-if statement block from a purely parsing standpoint?

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

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

Looking for the best solution! =)

Edit: Thanks for the insight guys. I was actually writi开发者_如何学JAVAng a regex to match all functions in a program and I started getting these else-if blocks with the results. That is when I realized the unique connection between the two. =)


That what keywords - namely else and if - are reserved for.

Function declarations start with a type and therefore the parser has to make sure there will never be a type-expression like else or if.


The two are actually completely different.

A function follows the pattern:

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

An else-if on the other hand, the way you've written it in C style, is a special case of a single statement else block. Just like you can have one statement under an else when the curly braces are omitted:

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

The single statement is also allowed to be an if-else statement:

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

more usually written the way you have (else if (...)).

Further, there is no parameter list, just a required boolean condition, and there is no return type in an else if. So one's the definition of a subroutine, and the other is two conditional blocks chained together - there is nothing in particular connecting the two. This is a good example why regex can't be used to parse C++/HTML/XML/anything with complex grammar.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号