【问题标题】:Parser problem - Else-If and a Function Declaration解析器问题 - Else-If 和函数声明
【发布时间】:2010-05-25 12:48:18
【问题描述】:
一个快速而有趣的问题 - 从纯解析的角度来看,C/C++ 中的函数声明和 else-if 语句块有什么区别?
void function_name(arguments) {
[statement-block]
}
else if(arguments) {
[statement-block]
}
寻找最佳解决方案! =)
编辑:感谢您的洞察力。我实际上是在编写一个正则表达式来匹配程序中的所有函数,然后我开始获取这些 else-if 块和结果。那时我才意识到两者之间的独特联系。 =)
【问题讨论】:
标签:
c++
c
parsing
programming-languages
【解决方案1】:
保留哪些关键字 - 即 else 和 if。
函数声明以类型开头,因此解析器必须确保永远不会出现像 else 或 if 这样的类型表达式。
【解决方案2】:
两者其实完全不同。
函数遵循模式:
return-type function([argument1, argument2... argumentN]) // arguments optional
{
[statement-block]
}
另一方面,else-if,你用 C 风格编写的方式,是单个语句 else 块的特例。就像省略花括号时可以在 else 下放置一个语句:
if (boolean-condition)
// ...
else
single-statement;
单条语句也可以是if-else语句:
if (boolean-condition)
// ...
else
if (boolean-condition)
{
// ...
}
通常以您的方式编写 (else if (...))。
此外,没有参数列表,只有一个必需的布尔条件,else if 中没有返回类型。所以一个是子程序的定义,另一个是链接在一起的两个条件块 - 没有什么特别连接两者。这是一个很好的例子,为什么 regex 不能用于解析 C++/HTML/XML/任何具有复杂语法的东西。