Skip to content

Instantly share code, notes, and snippets.

@rparree
Last active January 13, 2017 06:49
Show Gist options
  • Select an option

  • Save rparree/9d2f23fe997520131945fcf549cce420 to your computer and use it in GitHub Desktop.

Select an option

Save rparree/9d2f23fe997520131945fcf549cce420 to your computer and use it in GitHub Desktop.
Clickable Scala syntax BNF
<!--
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> ‘=&gt;’ <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> | ‘_’) ‘=&gt;’ <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>) ‘=&gt;’ <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> ‘&lt;-’ <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>] ‘=&gt;’ <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>] [‘&gt;:’ <a
href='#Type'>Type</a>] [‘&lt;:’ <a href='#Type'>Type</a>]
{‘&lt;%’ <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>
| ‘=&gt;’ <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>] ‘=&gt;’
| ‘this’ ‘:’ <a href='#Type'>Type</a> ‘=&gt;’
<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> [‘=&gt;’ <a href='#id'>id</a> | ‘=&gt;’ ‘_’]
<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>] [‘&gt;:’ <a
href='#Type'>Type</a>] [‘&lt;:’ <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