Scala SLS语言规则符号

Scala SLS语言规则符号,scala,specifications,Scala,Specifications,我试着读SLS,但它有一些奇怪的BNF符号。有人能澄清这个符号吗。例如,“类型”一章有以下内容: Type ::= FunctionArgTypes ‘=>’ Type | InfixType [ExistentialClause] FunctionArgTypes ::= InfixType | ‘(’ [ ParamType {‘,’ ParamType

我试着读SLS,但它有一些奇怪的BNF符号。有人能澄清这个符号吗。例如,“类型”一章有以下内容:

Type                 ::= FunctionArgTypes ‘=>’ Type
                       | InfixType [ExistentialClause]
FunctionArgTypes     ::= InfixType
                       | ‘(’ [ ParamType {‘,’ ParamType } ] ‘)’
ExistentialClause    ::= ‘forSome’ ‘{’ ExistentialDcl {semi ExistentialDcl} ‘}’ 
ExistentialDcl       ::= ‘type’ TypeDcl
                       | ‘val’ ValDcl
InfixType            ::= CompoundType {id [nl] CompoundType}
CompoundType         ::= AnnotType {‘with’ AnnotType} [Refinement]
                       | Refinement
AnnotType            ::= SimpleType {Annotation} 
SimpleType           ::= SimpleType TypeArgs
                       | SimpleType ‘#’ id | StableId
                       | Path ‘.’ ‘type’
                       | ‘(’ Types ’)’
TypeArgs             ::= ‘[’ Types ‘]’ 
Types                ::= Type {‘,’ Type}

::=
|
这样的符号我很清楚,但是
[]
{}
之间有什么区别呢。我也找不到诸如
id
[nl]
重新设置
类型
之类的描述

没错,SLS中使用的符号称为-Extended Backus–Naur Form。它是由帕斯卡的创始人尼古拉斯·沃思开发的,如果我没有弄错的话,他是奥德斯基教授博士研究的导师。SLS(第159页)末尾描述了所有Scala语法,在这里可以找到
类型
重新设置
nl
以及Scala中使用的其他东西

对于EBNF it self,这里是完整的语法表:

Usage            Notation
definition       =
concatenation    ,
termination      ;
alternation      |
option           [ ... ]
repetition       { ... }
grouping         ( ... )
terminal string  " ... "
terminal string  ' ... '
comment          (* ... *)
special sequence ? ... ?
exception        -
SLS中的符号稍作修改,即使用
:=
代替简单的
=
,空格代替