Scala SLS语言规则符号
我试着读SLS,但它有一些奇怪的BNF符号。有人能澄清这个符号吗。例如,“类型”一章有以下内容:Scala SLS语言规则符号,scala,specifications,Scala,Specifications,我试着读SLS,但它有一些奇怪的BNF符号。有人能澄清这个符号吗。例如,“类型”一章有以下内容: Type ::= FunctionArgTypes ‘=>’ Type | InfixType [ExistentialClause] FunctionArgTypes ::= InfixType | ‘(’ [ ParamType {‘,’ ParamType
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中的符号稍作修改,即使用:=
代替简单的=
,空格代替,