理解Scala语法规范中的换行符?

理解Scala语法规范中的换行符?,scala,syntax,Scala,Syntax,我对这件事感到困惑 复制自Scala规范: semi ::= ‘;’ | nl {nl} Scala是一种面向行的语言,语句可以用分号或换行符终止。如果满足以下三个条件,Scala源文本中的换行符将被视为特殊标记“nl”: 紧靠换行符前面的标记可以终止语句 紧跟在换行符后面的标记可以开始一条语句 标记出现在启用换行符的区域中 可以终止语句的标记有:文字、标识符、以下分隔符和保留字: this null true false return type &l

我对这件事感到困惑

复制自Scala规范:

semi ::= ‘;’ |  nl {nl}
Scala是一种面向行的语言,语句可以用分号或换行符终止。如果满足以下三个条件,Scala源文本中的换行符将被视为特殊标记“nl”:

  • 紧靠换行符前面的标记可以终止语句
  • 紧跟在换行符后面的标记可以开始一条语句
  • 标记出现在启用换行符的区域中
可以终止语句的标记有:文字、标识符、以下分隔符和保留字:

this    null    true    false    return    type    <xml-start>
_       )       ]       }
catch    else    extends    finally    forSome    match
with    yield    ,    .    ;    :    =    =>    <-    <:    <%
>:    #    [    )    ]    }
  • 对于情况2,让我调用bs令牌(begin语句令牌),除了
    catch
    else
    extends
    等。在bs令牌之后是否禁用换行令牌
  • 例如,在下面的代码中,第一个和第二个
    \n
    是令牌,第三个和第四个
    \n
    不是令牌:

    if (true) // \n
      1  // \n
    else // \n
      2 // \n
    
    
    上一个问题
    if (true) // \n
      1  // \n
    else // \n
      2 // \n