【问题标题】: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】:

    保留哪些关键字 - 即 elseif

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

    【讨论】:

      【解决方案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/任何具有复杂语法的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-21
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        • 2012-12-22
        • 1970-01-01
        相关资源
        最近更新 更多