Last active
January 13, 2017 06:49
-
-
Save rparree/9d2f23fe997520131945fcf549cce420 to your computer and use it in GitHub Desktop.
Clickable Scala syntax BNF
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- | |
| Source: https://www.scala-lang.org/files/archive/spec/2.13/13-syntax-summary.html | |
| Just some nifty regex search/replace | |
| --> | |
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>Title</title> | |
| <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/default.min.css"> | |
| <script src="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script> | |
| </head> | |
| <body> | |
| <div> | |
| <pre><code> | |
| <span id='Literal'>Literal</span> ::= [‘-’] <a href='#integerLiteral'>integerLiteral</a> | |
| | [‘-’] <a href='#floatingPointLiteral'>floatingPointLiteral</a> | |
| | <a href='#booleanLiteral'>booleanLiteral</a> | |
| | <a href='#characterLiteral'>characterLiteral</a> | |
| | <a href='#stringLiteral'>stringLiteral</a> | |
| | <a href='#symbolLiteral'>symbolLiteral</a> | |
| | ‘null’ | |
| <span id='QualId'>QualId</span> ::= <a href='#id'>id</a> {‘.’ <a href='#id'>id</a>} | |
| <span id='ids'>ids</span> ::= <a href='#id'>id</a> {‘,’ <a href='#id'>id</a>} | |
| <span id='Path'>Path</span> ::= <a href='#StableId'>StableId</a> | |
| | [<a href='#id'>id</a> ‘.’] ‘this’ | |
| <span id='StableId'>StableId</span> ::= <a href='#id'>id</a> | |
| | <a href='#Path'>Path</a> ‘.’ <a href='#id'>id</a> | |
| | [<a href='#id'>id</a> ‘.’] ‘super’ [<a href='#ClassQualifier'>ClassQualifier</a>] ‘.’ <a | |
| href='#id'>id</a> | |
| <span id='ClassQualifier'>ClassQualifier</span> ::= ‘[’ <a href='#id'>id</a> ‘]’ | |
| <span id='Type'>Type</span> ::= <a href='#FunctionArgTypes'>FunctionArgTypes</a> ‘=>’ <a | |
| href='#Type'>Type</a> | |
| | <a href='#InfixType'>InfixType</a> [<a href='#ExistentialClause'>ExistentialClause</a>] | |
| <span id='FunctionArgTypes'>FunctionArgTypes</span> ::= <a href='#InfixType'>InfixType</a> | |
| | ‘(’ [ <a href='#ParamType'>ParamType</a> {‘,’ <a href='#ParamType'>ParamType</a> } ] ‘)’ | |
| <span id='ExistentialClause'>ExistentialClause</span> ::= ‘forSome’ ‘{’ <a href='#ExistentialDcl'>ExistentialDcl</a> {semi <a | |
| href='#ExistentialDcl'>ExistentialDcl</a>} ‘}’ | |
| <span id='ExistentialDcl'>ExistentialDcl</span> ::= ‘type’ <a href='#TypeDcl'>TypeDcl</a> | |
| | ‘val’ <a href='#ValDcl'>ValDcl</a> | |
| <span id='InfixType'>InfixType</span> ::= <a href='#CompoundType'>CompoundType</a> {id [<a href='#nl'>nl</a>] <a | |
| href='#CompoundType'>CompoundType</a>} | |
| <span id='CompoundType'>CompoundType</span> ::= <a href='#AnnotType'>AnnotType</a> {‘with’ <a href='#AnnotType'>AnnotType</a>} [<a | |
| href='#Refinement'>Refinement</a>] | |
| | <a href='#Refinement'>Refinement</a> | |
| <span id='AnnotType'>AnnotType</span> ::= <a href='#SimpleType'>SimpleType</a> {Annotation} | |
| <span id='SimpleType'>SimpleType</span> ::= <a href='#SimpleType'>SimpleType</a> <a | |
| href='#TypeArgs'>TypeArgs</a> | |
| | <a href='#SimpleType'>SimpleType</a> ‘#’ <a href='#id'>id</a> | |
| | <a href='#StableId'>StableId</a> | |
| | <a href='#Path'>Path</a> ‘.’ ‘type’ | |
| | ‘(’ <a href='#Types'>Types</a> ‘)’ | |
| <span id='TypeArgs'>TypeArgs</span> ::= ‘[’ <a href='#Types'>Types</a> ‘]’ | |
| <span id='Types'>Types</span> ::= <a href='#Type'>Type</a> {‘,’ <a href='#Type'>Type</a>} | |
| <span id='Refinement'>Refinement</span> ::= [<a href='#nl'>nl</a>] ‘{’ <a href='#RefineStat'>RefineStat</a> {semi <a | |
| href='#RefineStat'>RefineStat</a>} ‘}’ | |
| <span id='RefineStat'>RefineStat</span> ::= <a href='#Dcl'>Dcl</a> | |
| | ‘type’ <a href='#TypeDef'>TypeDef</a> | |
| | | |
| <span id='TypePat'>TypePat</span> ::= <a href='#Type'>Type</a> | |
| <span id='Ascription'>Ascription</span> ::= ‘:’ <a href='#InfixType'>InfixType</a> | |
| | ‘:’ <a href='#Annotation'>Annotation</a> {Annotation} | |
| | ‘:’ ‘_’ ‘*’ | |
| <span id='Expr'>Expr</span> ::= (<a href='#Bindings'>Bindings</a> | [‘implicit’] <a href='#id'>id</a> | ‘_’) ‘=>’ <a | |
| href='#Expr'>Expr</a> | |
| | <a href='#Expr1'>Expr1</a> | |
| <span id='Expr1'>Expr1</span> ::= ‘if’ ‘(’ <a href='#Expr'>Expr</a> ‘)’ {nl} <a | |
| href='#Expr'>Expr</a> [[<a href='#semi'>semi</a>] ‘else’ <a href='#Expr'>Expr</a>] | |
| | ‘while’ ‘(’ <a href='#Expr'>Expr</a> ‘)’ {nl} <a href='#Expr'>Expr</a> | |
| | ‘try’ (‘{’ <a href='#Block'>Block</a> ‘}’ | <a href='#Expr'>Expr</a>) [‘catch’ ‘{’ <a | |
| href='#CaseClauses'>CaseClauses</a> ‘}’] [‘finally’ <a href='#Expr'>Expr</a>] | |
| | ‘do’ <a href='#Expr'>Expr</a> [<a href='#semi'>semi</a>] ‘while’ ‘(’ <a href='#Expr'>Expr</a> ‘)’ | |
| | ‘for’ (‘(’ <a href='#Enumerators'>Enumerators</a> ‘)’ | ‘{’ <a | |
| href='#Enumerators'>Enumerators</a> ‘}’) {nl} [‘yield’] <a href='#Expr'>Expr</a> | |
| | ‘throw’ <a href='#Expr'>Expr</a> | |
| | ‘return’ [<a href='#Expr'>Expr</a>] | |
| | [<a href='#SimpleExpr'>SimpleExpr</a> ‘.’] <a href='#id'>id</a> ‘=’ <a href='#Expr'>Expr</a> | |
| | <a href='#SimpleExpr1'>SimpleExpr1</a> <a href='#ArgumentExprs'>ArgumentExprs</a> ‘=’ <a | |
| href='#Expr'>Expr</a> | |
| | <a href='#PostfixExpr'>PostfixExpr</a> | |
| | <a href='#PostfixExpr'>PostfixExpr</a> <a href='#Ascription'>Ascription</a> | |
| | <a href='#PostfixExpr'>PostfixExpr</a> ‘match’ ‘{’ <a href='#CaseClauses'>CaseClauses</a> ‘}’ | |
| <span id='PostfixExpr'>PostfixExpr</span> ::= <a href='#InfixExpr'>InfixExpr</a> [<a href='#id'>id</a> [<a | |
| href='#nl'>nl</a>]] | |
| <span id='InfixExpr'>InfixExpr</span> ::= <a href='#PrefixExpr'>PrefixExpr</a> | |
| | <a href='#InfixExpr'>InfixExpr</a> <a href='#id'>id</a> [<a href='#nl'>nl</a>] <a | |
| href='#InfixExpr'>InfixExpr</a> | |
| <span id='PrefixExpr'>PrefixExpr</span> ::= [‘-’ | ‘+’ | ‘~’ | ‘!’] <a href='#SimpleExpr'>SimpleExpr</a> | |
| <span id='SimpleExpr'>SimpleExpr</span> ::= ‘new’ (<a href='#ClassTemplate'>ClassTemplate</a> | <a | |
| href='#TemplateBody'>TemplateBody</a>) | |
| | <a href='#BlockExpr'>BlockExpr</a> | |
| | <a href='#SimpleExpr1'>SimpleExpr1</a> [‘_’] | |
| <span id='SimpleExpr1'>SimpleExpr1</span> ::= <a href='#Literal'>Literal</a> | |
| | <a href='#Path'>Path</a> | |
| | ‘_’ | |
| | ‘(’ [<a href='#Exprs'>Exprs</a>] ‘)’ | |
| | <a href='#SimpleExpr'>SimpleExpr</a> ‘.’ <a href='#id'>id</a> | |
| | <a href='#SimpleExpr'>SimpleExpr</a> <a href='#TypeArgs'>TypeArgs</a> | |
| | <a href='#SimpleExpr1'>SimpleExpr1</a> <a href='#ArgumentExprs'>ArgumentExprs</a> | |
| | <a href='#XmlExpr'>XmlExpr</a> | |
| <span id='Exprs'>Exprs</span> ::= <a href='#Expr'>Expr</a> {‘,’ <a href='#Expr'>Expr</a>} | |
| <span id='ArgumentExprs'>ArgumentExprs</span> ::= ‘(’ [<a href='#Exprs'>Exprs</a>] ‘)’ | |
| | ‘(’ [<a href='#Exprs'>Exprs</a> ‘,’] <a href='#PostfixExpr'>PostfixExpr</a> ‘:’ ‘_’ ‘*’ ‘)’ | |
| | [<a href='#nl'>nl</a>] <a href='#BlockExpr'>BlockExpr</a> | |
| <span id='BlockExpr'>BlockExpr</span> ::= ‘{’ <a href='#CaseClauses'>CaseClauses</a> ‘}’ | |
| | ‘{’ <a href='#Block'>Block</a> ‘}’ | |
| <span id='Block'>Block</span> ::= <a href='#BlockStat'>BlockStat</a> {semi <a | |
| href='#BlockStat'>BlockStat</a>} [<a href='#ResultExpr'>ResultExpr</a>] | |
| <span id='BlockStat'>BlockStat</span> ::= <a href='#Import'>Import</a> | |
| | {Annotation} [‘implicit’ | ‘lazy’] <a href='#Def'>Def</a> | |
| | {Annotation} {LocalModifier} <a href='#TmplDef'>TmplDef</a> | |
| | <a href='#Expr1'>Expr1</a> | |
| | | |
| <span id='ResultExpr'>ResultExpr</span> ::= <a href='#Expr1'>Expr1</a> | |
| | (<a href='#Bindings'>Bindings</a> | ([‘implicit’] <a href='#id'>id</a> | ‘_’) ‘:’ <a | |
| href='#CompoundType'>CompoundType</a>) ‘=>’ <a href='#Block'>Block</a> | |
| <span id='Enumerators'>Enumerators</span> ::= <a href='#Generator'>Generator</a> {semi <a href='#Generator'>Generator</a>} | |
| <span id='Generator'>Generator</span> ::= <a href='#Pattern1'>Pattern1</a> ‘<-’ <a href='#Expr'>Expr</a> {[<a | |
| href='#semi'>semi</a>] <a href='#Guard'>Guard</a> | <a href='#semi'>semi</a> <a | |
| href='#Pattern1'>Pattern1</a> ‘=’ <a href='#Expr'>Expr</a>} | |
| <span id='CaseClauses'>CaseClauses</span> ::= <a href='#CaseClause'>CaseClause</a> { <a href='#CaseClause'>CaseClause</a> } | |
| <span id='CaseClause'>CaseClause</span> ::= ‘case’ <a href='#Pattern'>Pattern</a> [<a href='#Guard'>Guard</a>] ‘=>’ <a | |
| href='#Block'>Block</a> | |
| <span id='Guard'>Guard</span> ::= ‘if’ <a href='#PostfixExpr'>PostfixExpr</a> | |
| <span id='Pattern'>Pattern</span> ::= <a href='#Pattern1'>Pattern1</a> { ‘|’ <a | |
| href='#Pattern1'>Pattern1</a> } | |
| <span id='Pattern1'>Pattern1</span> ::= <a href='#varid'>varid</a> ‘:’ <a href='#TypePat'>TypePat</a> | |
| | ‘_’ ‘:’ <a href='#TypePat'>TypePat</a> | |
| | <a href='#Pattern2'>Pattern2</a> | |
| <span id='Pattern2'>Pattern2</span> ::= <a href='#varid'>varid</a> [‘@’ <a href='#Pattern3'>Pattern3</a>] | |
| | <a href='#Pattern3'>Pattern3</a> | |
| <span id='Pattern3'>Pattern3</span> ::= <a href='#SimplePattern'>SimplePattern</a> | |
| | <a href='#SimplePattern'>SimplePattern</a> { <a href='#id'>id</a> [<a href='#nl'>nl</a>] <a | |
| href='#SimplePattern'>SimplePattern</a> } | |
| <span id='SimplePattern'>SimplePattern</span> ::= ‘_’ | |
| | <a href='#varid'>varid</a> | |
| | <a href='#Literal'>Literal</a> | |
| | <a href='#StableId'>StableId</a> | |
| | <a href='#StableId'>StableId</a> ‘(’ [<a href='#Patterns'>Patterns</a>] ‘)’ | |
| | <a href='#StableId'>StableId</a> ‘(’ [<a href='#Patterns'>Patterns</a> ‘,’] [<a href='#varid'>varid</a> ‘@’] ‘_’ ‘*’ ‘)’ | |
| | ‘(’ [<a href='#Patterns'>Patterns</a>] ‘)’ | |
| | <a href='#XmlPattern'>XmlPattern</a> | |
| <span id='Patterns'>Patterns</span> ::= <a href='#Pattern'>Pattern</a> [‘,’ <a href='#Patterns'>Patterns</a>] | |
| | ‘_’ ‘*’ | |
| <span id='TypeParamClause'>TypeParamClause</span> ::= ‘[’ <a href='#VariantTypeParam'>VariantTypeParam</a> {‘,’ <a | |
| href='#VariantTypeParam'>VariantTypeParam</a>} ‘]’ | |
| <span id='FunTypeParamClause'>FunTypeParamClause</span>::= ‘[’ <a href='#TypeParam'>TypeParam</a> {‘,’ <a | |
| href='#TypeParam'>TypeParam</a>} ‘]’ | |
| <span id='VariantTypeParam'>VariantTypeParam</span> ::= {Annotation} [‘+’ | ‘-’] <a href='#TypeParam'>TypeParam</a> | |
| <span id='TypeParam'>TypeParam</span> ::= (<a href='#id'>id</a> | ‘_’) [<a href='#TypeParamClause'>TypeParamClause</a>] [‘>:’ <a | |
| href='#Type'>Type</a>] [‘<:’ <a href='#Type'>Type</a>] | |
| {‘<%’ <a href='#Type'>Type</a>} {‘:’ <a href='#Type'>Type</a>} | |
| <span id='ParamClauses'>ParamClauses</span> ::= {ParamClause} [[<a href='#nl'>nl</a>] ‘(’ ‘implicit’ <a | |
| href='#Params'>Params</a> ‘)’] | |
| <span id='ParamClause'>ParamClause</span> ::= [<a href='#nl'>nl</a>] ‘(’ [<a href='#Params'>Params</a>] ‘)’ | |
| <span id='Params'>Params</span> ::= <a href='#Param'>Param</a> {‘,’ <a href='#Param'>Param</a>} | |
| <span id='Param'>Param</span> ::= {Annotation} <a href='#id'>id</a> [‘:’ <a | |
| href='#ParamType'>ParamType</a>] [‘=’ <a href='#Expr'>Expr</a>] | |
| <span id='ParamType'>ParamType</span> ::= <a href='#Type'>Type</a> | |
| | ‘=>’ <a href='#Type'>Type</a> | |
| | <a href='#Type'>Type</a> ‘*’ | |
| <span id='ClassParamClauses'>ClassParamClauses</span> ::= {ClassParamClause} | |
| [[<a href='#nl'>nl</a>] ‘(’ ‘implicit’ <a href='#ClassParams'>ClassParams</a> ‘)’] | |
| <span id='ClassParamClause'>ClassParamClause</span> ::= [<a href='#nl'>nl</a>] ‘(’ [<a href='#ClassParams'>ClassParams</a>] ‘)’ | |
| <span id='ClassParams'>ClassParams</span> ::= <a href='#ClassParam'>ClassParam</a> {‘,’ <a href='#ClassParam'>ClassParam</a>} | |
| <span id='ClassParam'>ClassParam</span> ::= {Annotation} {Modifier} [(‘val’ | ‘var’)] | |
| <a href='#id'>id</a> ‘:’ <a href='#ParamType'>ParamType</a> [‘=’ <a href='#Expr'>Expr</a>] | |
| <span id='Bindings'>Bindings</span> ::= ‘(’ <a href='#Binding'>Binding</a> {‘,’ <a | |
| href='#Binding'>Binding</a>} ‘)’ | |
| <span id='Binding'>Binding</span> ::= (<a href='#id'>id</a> | ‘_’) [‘:’ <a href='#Type'>Type</a>] | |
| <span id='Modifier'>Modifier</span> ::= <a href='#LocalModifier'>LocalModifier</a> | |
| | <a href='#AccessModifier'>AccessModifier</a> | |
| | ‘override’ | |
| <span id='LocalModifier'>LocalModifier</span> ::= ‘abstract’ | |
| | ‘final’ | |
| | ‘sealed’ | |
| | ‘implicit’ | |
| | ‘lazy’ | |
| <span id='AccessModifier'>AccessModifier</span> ::= (‘private’ | ‘protected’) [<a href='#AccessQualifier'>AccessQualifier</a>] | |
| <span id='AccessQualifier'>AccessQualifier</span> ::= ‘[’ (<a href='#id'>id</a> | ‘this’) ‘]’ | |
| <span id='Annotation'>Annotation</span> ::= ‘@’ <a href='#SimpleType'>SimpleType</a> {ArgumentExprs} | |
| <span id='ConstrAnnotation'>ConstrAnnotation</span> ::= ‘@’ <a href='#SimpleType'>SimpleType</a> <a | |
| href='#ArgumentExprs'>ArgumentExprs</a> | |
| <span id='TemplateBody'>TemplateBody</span> ::= [<a href='#nl'>nl</a>] ‘{’ [<a href='#SelfType'>SelfType</a>] <a | |
| href='#TemplateStat'>TemplateStat</a> {semi <a href='#TemplateStat'>TemplateStat</a>} ‘}’ | |
| <span id='TemplateStat'>TemplateStat</span> ::= <a href='#Import'>Import</a> | |
| | {Annotation [<a href='#nl'>nl</a>]} {Modifier} <a href='#Def'>Def</a> | |
| | {Annotation [<a href='#nl'>nl</a>]} {Modifier} <a href='#Dcl'>Dcl</a> | |
| | <a href='#Expr'>Expr</a> | |
| | | |
| <span id='SelfType'>SelfType</span> ::= <a href='#id'>id</a> [‘:’ <a href='#Type'>Type</a>] ‘=>’ | |
| | ‘this’ ‘:’ <a href='#Type'>Type</a> ‘=>’ | |
| <span id='Import'>Import</span> ::= ‘import’ <a href='#ImportExpr'>ImportExpr</a> {‘,’ <a | |
| href='#ImportExpr'>ImportExpr</a>} | |
| <span id='ImportExpr'>ImportExpr</span> ::= <a href='#StableId'>StableId</a> ‘.’ (<a href='#id'>id</a> | ‘_’ | <a | |
| href='#ImportSelectors'>ImportSelectors</a>) | |
| <span id='ImportSelectors'>ImportSelectors</span> ::= ‘{’ {ImportSelector ‘,’} (<a href='#ImportSelector'>ImportSelector</a> | ‘_’) ‘}’ | |
| <span id='ImportSelector'>ImportSelector</span> ::= <a href='#id'>id</a> [‘=>’ <a href='#id'>id</a> | ‘=>’ ‘_’] | |
| <span id='Dcl'>Dcl</span> ::= ‘val’ <a href='#ValDcl'>ValDcl</a> | |
| | ‘var’ <a href='#VarDcl'>VarDcl</a> | |
| | ‘def’ <a href='#FunDcl'>FunDcl</a> | |
| | ‘type’ {nl} <a href='#TypeDcl'>TypeDcl</a> | |
| <span id='ValDcl'>ValDcl</span> ::= <a href='#ids'>ids</a> ‘:’ <a href='#Type'>Type</a> | |
| <span id='VarDcl'>VarDcl</span> ::= <a href='#ids'>ids</a> ‘:’ <a href='#Type'>Type</a> | |
| <span id='FunDcl'>FunDcl</span> ::= <a href='#FunSig'>FunSig</a> [‘:’ <a href='#Type'>Type</a>] | |
| <span id='FunSig'>FunSig</span> ::= <a href='#id'>id</a> [<a | |
| href='#FunTypeParamClause'>FunTypeParamClause</a>] <a href='#ParamClauses'>ParamClauses</a> | |
| <span id='TypeDcl'>TypeDcl</span> ::= <a href='#id'>id</a> [<a href='#TypeParamClause'>TypeParamClause</a>] [‘>:’ <a | |
| href='#Type'>Type</a>] [‘<:’ <a href='#Type'>Type</a>] | |
| <span id='PatVarDef'>PatVarDef</span> ::= ‘val’ <a href='#PatDef'>PatDef</a> | |
| | ‘var’ <a href='#VarDef'>VarDef</a> | |
| <span id='Def'>Def</span> ::= <a href='#PatVarDef'>PatVarDef</a> | |
| | ‘def’ <a href='#FunDef'>FunDef</a> | |
| | ‘type’ {nl} <a href='#TypeDef'>TypeDef</a> | |
| | <a href='#TmplDef'>TmplDef</a> | |
| <span id='PatDef'>PatDef</span> ::= <a href='#Pattern2'>Pattern2</a> {‘,’ <a href='#Pattern2'>Pattern2</a>} [‘:’ <a | |
| href='#Type'>Type</a>] ‘=’ <a href='#Expr'>Expr</a> | |
| <span id='VarDef'>VarDef</span> ::= <a href='#PatDef'>PatDef</a> | |
| | <a href='#ids'>ids</a> ‘:’ <a href='#Type'>Type</a> ‘=’ ‘_’ | |
| <span id='FunDef'>FunDef</span> ::= <a href='#FunSig'>FunSig</a> [‘:’ <a href='#Type'>Type</a>] ‘=’ <a | |
| href='#Expr'>Expr</a> | |
| | <a href='#FunSig'>FunSig</a> [<a href='#nl'>nl</a>] ‘{’ <a href='#Block'>Block</a> ‘}’ | |
| | ‘this’ <a href='#ParamClause'>ParamClause</a> <a href='#ParamClauses'>ParamClauses</a> | |
| (‘=’ <a href='#ConstrExpr'>ConstrExpr</a> | [<a href='#nl'>nl</a>] <a href='#ConstrBlock'>ConstrBlock</a>) | |
| <span id='TypeDef'>TypeDef</span> ::= <a href='#id'>id</a> [<a href='#TypeParamClause'>TypeParamClause</a>] ‘=’ <a | |
| href='#Type'>Type</a> | |
| <span id='TmplDef'>TmplDef</span> ::= [‘case’] ‘class’ <a href='#ClassDef'>ClassDef</a> | |
| | [‘case’] ‘object’ <a href='#ObjectDef'>ObjectDef</a> | |
| | ‘trait’ <a href='#TraitDef'>TraitDef</a> | |
| <span id='ClassDef'>ClassDef</span> ::= <a href='#id'>id</a> [<a href='#TypeParamClause'>TypeParamClause</a>] {ConstrAnnotation} [<a | |
| href='#AccessModifier'>AccessModifier</a>] | |
| <a href='#ClassParamClauses'>ClassParamClauses</a> <a | |
| href='#ClassTemplateOpt'>ClassTemplateOpt</a> | |
| <span id='TraitDef'>TraitDef</span> ::= <a href='#id'>id</a> [<a href='#TypeParamClause'>TypeParamClause</a>] <a | |
| href='#TraitTemplateOpt'>TraitTemplateOpt</a> | |
| <span id='ObjectDef'>ObjectDef</span> ::= <a href='#id'>id</a> <a | |
| href='#ClassTemplateOpt'>ClassTemplateOpt</a> | |
| <span id='ClassTemplateOpt'>ClassTemplateOpt</span> ::= ‘extends’ <a href='#ClassTemplate'>ClassTemplate</a> | [[‘extends’] <a | |
| href='#TemplateBody'>TemplateBody</a>] | |
| <span id='TraitTemplateOpt'>TraitTemplateOpt</span> ::= ‘extends’ <a href='#TraitTemplate'>TraitTemplate</a> | [[‘extends’] <a | |
| href='#TemplateBody'>TemplateBody</a>] | |
| <span id='ClassTemplate'>ClassTemplate</span> ::= [<a href='#EarlyDefs'>EarlyDefs</a>] <a href='#ClassParents'>ClassParents</a> [<a | |
| href='#TemplateBody'>TemplateBody</a>] | |
| <span id='TraitTemplate'>TraitTemplate</span> ::= [<a href='#EarlyDefs'>EarlyDefs</a>] <a href='#TraitParents'>TraitParents</a> [<a | |
| href='#TemplateBody'>TemplateBody</a>] | |
| <span id='ClassParents'>ClassParents</span> ::= <a href='#Constr'>Constr</a> {‘with’ <a href='#AnnotType'>AnnotType</a>} | |
| <span id='TraitParents'>TraitParents</span> ::= <a href='#AnnotType'>AnnotType</a> {‘with’ <a href='#AnnotType'>AnnotType</a>} | |
| <span id='Constr'>Constr</span> ::= <a href='#AnnotType'>AnnotType</a> {ArgumentExprs} | |
| <span id='EarlyDefs'>EarlyDefs</span> ::= ‘{’ [<a href='#EarlyDef'>EarlyDef</a> {semi <a href='#EarlyDef'>EarlyDef</a>}] ‘}’ ‘with’ | |
| <span id='EarlyDef'>EarlyDef</span> ::= {Annotation [<a href='#nl'>nl</a>]} {Modifier} <a href='#PatVarDef'>PatVarDef</a> | |
| <span id='ConstrExpr'>ConstrExpr</span> ::= <a href='#SelfInvocation'>SelfInvocation</a> | |
| | <a href='#ConstrBlock'>ConstrBlock</a> | |
| <span id='ConstrBlock'>ConstrBlock</span> ::= ‘{’ <a href='#SelfInvocation'>SelfInvocation</a> {semi <a | |
| href='#BlockStat'>BlockStat</a>} ‘}’ | |
| <span id='SelfInvocation'>SelfInvocation</span> ::= ‘this’ <a href='#ArgumentExprs'>ArgumentExprs</a> {ArgumentExprs} | |
| <span id='TopStatSeq'>TopStatSeq</span> ::= <a href='#TopStat'>TopStat</a> {semi <a | |
| href='#TopStat'>TopStat</a>} | |
| <span id='TopStat'>TopStat</span> ::= {Annotation [<a href='#nl'>nl</a>]} {Modifier} <a href='#TmplDef'>TmplDef</a> | |
| | <a href='#Import'>Import</a> | |
| | <a href='#Packaging'>Packaging</a> | |
| | <a href='#PackageObject'>PackageObject</a> | |
| | | |
| <span id='Packaging'>Packaging</span> ::= ‘package’ <a href='#QualId'>QualId</a> [<a | |
| href='#nl'>nl</a>] ‘{’ <a href='#TopStatSeq'>TopStatSeq</a> ‘}’ | |
| <span id='PackageObject'>PackageObject</span> ::= ‘package’ ‘object’ <a href='#ObjectDef'>ObjectDef</a> | |
| <span id='CompilationUnit'>CompilationUnit</span> ::= {‘package’ <a href='#QualId'>QualId</a> <a | |
| href='#semi'>semi</a>} <a href='#TopStatSeq'>TopStatSeq</a> | |
| </code></pre> | |
| </div> | |
| </body> | |
| <script>hljs.initHighlightingOnLoad();</script> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment