首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SLS语言规则符号

SLS语言规则符号
EN

Stack Overflow用户
提问于 2013-10-15 07:26:32
回答 1查看 75关注 0票数 1

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

代码语言:javascript
复制
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]RefinmentType这样的东西的描述。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-15 08:21:05

你说得对,SLS中使用的符号叫做EBNF -。它是由帕斯卡的创建者尼克劳斯·威思( Niklaus )开发的,如果我没弄错的话,他是教授的主管。奥德斯基博士的研究。所有Scala语法都在SLS的末尾描述(第159页),在这里您可以找到TypeRefinmentnl和其他在Scala中使用的东西。

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

代码语言:javascript
复制
Usage            Notation
definition       =
concatenation    ,
termination      ;
alternation      |
option           [ ... ]
repetition       { ... }
grouping         ( ... )
terminal string  " ... "
terminal string  ' ... '
comment          (* ... *)
special sequence ? ... ?
exception        -

SLS中的符号略有修改,即使用::=代替简单的=和用于级联的空间而不是,

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19375471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档