代码之家  ›  专栏  ›  技术社区  ›  Peter Mortensen Pieter Jan Bonestroo

还有其他问题吗?

  •  4
  • Peter Mortensen Pieter Jan Bonestroo  · 技术社区  · 16 年前

    什么是“挂其他”问题?(这是正确的名字吗?)

    遵循C++编码标准(忘记了哪一个)我总是 在控制结构中使用括号(块)。所以我不 通常有这个问题(最后一个(?)是“if”到哪一个? 否则属于),但为了理解 如果你对外国语有一个很好的理解 这个问题。我记得在一本关于 帕斯卡很多年前,但我找不到那本书。

    4 回复  |  直到 7 年前
        1
  •  7
  •   RichieHindle    16 年前

    哪个 if else 属于什么?

    if (a < b)
        if (c < d)
            a = b + d;
        else
            b = a + c;
    

    (显然,您应该忽略缩进。)

    这就是“其他挂起的问题”。

    C/C++通过一个规则说你不能拥有一个规则来消除歧义。 如果 -没有- 其他的 作为 如果 -身体 如果 -用 其他的 .

        2
  •  10
  •   Joe    16 年前

    暧昧别的。

    这里有一些信息: http://theory.stanford.edu/~amitp/yapps/yapps-doc/node3.html

    但经典的例子是:

    if a then
      if b then
         x = 1;
      else 
         y = 1;
    

    VS

    if a then
      if b then
         x = 1;
    else 
      y = 1;
    
        3
  •  2
  •   Peter Mortensen Pieter Jan Bonestroo    12 年前

    从朗格设计的角度来看。

    标准 BNF -喜欢语法 if - else :

    Statement :-   .. STUFF..
              |    IfStatement
    
    IfStatement :- IF_TOKEN '(' BoolExpression ')' Statement IfElseOpt
    
    IfElseOpt :-   /* Empty */
              |    ELSE_TOKEN Statement
    

    现在从解析器的角度来看:

    if (cond1) Statement1
       if (cond2) Statement2
    else Statement3
    

    当您到达else_标记时,解析器有两个选项,shift或reduce。问题是要选择哪个规则需要解析器必须遵循另一个规则。大多数解析器生成器在给定此选项时默认为移位。

        4
  •  -1
  •   Peter Mortensen Pieter Jan Bonestroo    7 年前

    我不认为帕斯卡有问题吗?

    这个缩进不正确。

    if a then
      if b then
         x = 1;
      else
         y = 1;
    

    从x=1之后移除分号将使其正确缩进。

    这个缩进正确

    if a then
      if b then
         x = 1;
    else
      y = 1;
    
    推荐文章