Files
kotlin-fork/docs/confluence.jetbrains.com/Kotlin/40702623_Grammar.confluence
T
2012-05-30 14:41:40 +04:00

928 lines
50 KiB
Plaintext

h1. Contents
{toc:style=disc|indent=20px}
h1. Notation
This section informally explains the grammar notation used below.
h2. Symbols and naming
_Terminal symbol_ names start with an uppercase letter, e.g. *SimpleName*
_Nonterminal symbol_ names start with lowercase letter, e.g. *kotlinFile*
Each _production_ starts with a colon (*:*)
_Symbol definitions_ may have many productions and are terminated by a semicolon (*;*)
Symbol definitions may be prepended with _attributes_, e.g. {{start}} attribute denotes a start symbol
h2. EBNF expressions
Operator {color:blue}*|*{color} denotes _alternative_
Operator {color:blue}*\**{color} denotes _iteration_ (zero or more)
Operator {color:blue}*+*{color} denotes _iteration_ (one or more)
Operator {color:blue}*?*{color} denotes _option_ (zero or one)
alpha{color:blue}*{*{color}beta{color:blue}*}*{color} denotes a nonempty _beta_-separated list of _alpha_'s
h1. Semicolons
[Kotlin] provides "semicolon inference": syntactically, subsentences (e.g., statements, declarations etc) are separated by
the pseudo-token [SEMI|#SEMI], which stands for "semicolon or newline". In most cases, there's no need for semicolons in
[Kotlin] code.
h1. Syntax
*Relevant pages:* [Namespaces]
{{start}}
{anchor:kotlinFile}*kotlinFile*
  {color:blue}*:*{color} [#preamble] [#toplevelObject]{color:blue}*\**{color}
  ;
{{start}}
{anchor:script}*script*
  {color:blue}*:*{color} [#preamble] [#expression]{color:blue}*\**{color}
  ;
{anchor:preamble}\[{color:grey}Used by [#script], [#kotlinFile]{color}\]
*preamble*
  {color:blue}*:*{color} [#packageHeader]{color:blue}*?*{color} [#import]{color:blue}*\**{color}
  ;
{anchor:packageHeader}\[{color:grey}Used by [#preamble]{color}\]
*packageHeader*
  {color:blue}*:*{color} [#modifiers] {color:green}*{{"package"}}*{color} [#SimpleName]{color:blue}*\{*{color}{color:green}*{{"."}}*{color}{color:blue}*\}*{color} [#SEMI]{color:blue}*?*{color}
  ;
{anchor:import}\[{color:grey}Used by [#preamble], [#package]{color}\]
*import*
  {color:blue}*:*{color} {color:green}*{{"import"}}*{color} {color:blue}*\(*{color}{color:green}*{{"package"}}*{color} {color:green}*{{"."}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color} [#SimpleName]{color:blue}*\{*{color}{color:green}*{{"."}}*{color}{color:blue}*\}*{color} {color:blue}*\(*{color}{color:green}*{{"."}}*{color} {color:green}*{{"\*"}}*{color} {color:blue}*|*{color} {color:green}*{{"as"}}*{color} [#SimpleName]{color:blue}*\)*{color}{color:blue}*?*{color} [#SEMI]{color:blue}*?*{color}
  ;
bq. See [Imports|Namespaces#Imports]
{anchor:toplevelObject}\[{color:grey}Used by [#package], [#kotlinFile]{color}\]
*toplevelObject*
  {color:blue}*:*{color} [#package]
  {color:blue}*:*{color} [#class]
  {color:blue}*:*{color} [#object]
  {color:blue}*:*{color} [#function]
  {color:blue}*:*{color} [#property]
  {color:blue}*:*{color} [#typedef]
  ;
{anchor:package}\[{color:grey}Used by [#toplevelObject]{color}\]
*package*
  {color:blue}*:*{color} {color:green}*{{"package"}}*{color} [#SimpleName]{color:blue}*\{*{color}{color:green}*{{"."}}*{color}{color:blue}*\}*{color} {color:green}*{{"\{"}}*{color}
       [#import]{color:blue}*\**{color}
       [#toplevelObject]{color:blue}*\**{color}
    {color:green}*{{"}"}}*{color}
  ;
bq. See [Namespaces]
{{undocumented}}
{anchor:typedef}\[{color:grey}Used by [#memberDeclaration], [#declaration], [#toplevelObject]{color}\]
*typedef*
  {color:blue}*:*{color} [#modifiers] {color:green}*{{"type"}}*{color} [#SimpleName] {color:blue}*\(*{color}[#typeParameters] [#typeConstraints]{color:blue}*\)*{color}{color:blue}*?*{color} {color:green}*{{"="}}*{color} [#type]
  ;
h2. Classes
bq. See [Classes and Inheritance]
{anchor:class}\[{color:grey}Used by [#memberDeclaration], [#declaration], [#toplevelObject]{color}\]
*class*
  {color:blue}*:*{color} [#modifiers] {color:blue}*\(*{color}{color:green}*{{"class"}}*{color} {color:blue}*|*{color} {color:green}*{{"trait"}}*{color}{color:blue}*\)*{color} [#SimpleName]
      [#typeParameters]{color:blue}*?*{color}
      [#modifiers] {color:blue}*\(*{color}{color:green}*{{"("}}*{color} [#functionParameter]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color} {color:green}*{{")"}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}
      {color:blue}*\(*{color}{color:green}*{{":"}}*{color} [#annotations] [#delegationSpecifier]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}
      [#typeConstraints]
      {color:blue}*\(*{color}[#classBody]{color:blue}*?*{color} {color:blue}*|*{color} [#enumClassBody]{color:blue}*\)*{color}
  ;
{anchor:classBody}\[{color:grey}Used by [#objectLiteral], [#enumEntry], [#class], [#object]{color}\]
*classBody*
  {color:blue}*:*{color} {color:blue}*\(*{color}{color:green}*{{"\{"}}*{color} [#memberDeclaration] {color:green}*{{"}"}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}
  ;
{anchor:delegationSpecifier}\[{color:grey}Used by [#objectLiteral], [#class], [#object]{color}\]
*delegationSpecifier*
  {color:blue}*:*{color} [#constructorInvocation] 
  {color:blue}*:*{color} [#explicitDelegation]
  ;
{anchor:explicitDelegation}\[{color:grey}Used by [#delegationSpecifier]{color}\]
*explicitDelegation*
  {color:blue}*:*{color} [#userType] {color:green}*{{"by"}}*{color} [#expression] 
  ;
{anchor:typeParameters}\[{color:grey}Used by [#enumEntry], [#class], [#property], [#typedef], [#function]{color}\]
*typeParameters*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"<"}}*{color}&nbsp;[#typeParameter]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{">"}}*{color}
&nbsp;&nbsp;;
{anchor:typeParameter}\[{color:grey}Used by [#typeParameters]{color}\]
*typeParameter*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;[#SimpleName]&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#userType]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;;
bq. See [Generic classes|Generics#Generic classes]
{anchor:typeConstraints}\[{color:grey}Used by [#enumEntry], [#class], [#property], [#typedef], [#function]{color}\]
*typeConstraints*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{"where"}}*{color}&nbsp;[#typeConstraint]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:typeConstraint}\[{color:grey}Used by [#typeConstraints]{color}\]
*typeConstraint*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]&nbsp;[#SimpleName]&nbsp;{color:green}*{{":"}}*{color}&nbsp;[#type]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]&nbsp;{color:green}*{{"class"}}*{color}&nbsp;{color:green}*{{"object"}}*{color}&nbsp;[#SimpleName]&nbsp;{color:green}*{{":"}}*{color}&nbsp;[#type]
&nbsp;&nbsp;;
bq. See [Generic constraints|Generics#Generic constraints]
h3. Class members
{anchor:memberDeclaration}\[{color:grey}Used by [#classBody]{color}\]
*memberDeclaration*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#classObject]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#object]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#constructor]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#function]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#property]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#class]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#typedef]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#anonymousInitializer]
&nbsp;&nbsp;;
{anchor:anonymousInitializer}\[{color:grey}Used by [#memberDeclaration]{color}\]
*anonymousInitializer*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#block]
&nbsp;&nbsp;;
{anchor:classObject}\[{color:grey}Used by [#memberDeclaration]{color}\]
*classObject*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:green}*{{"class"}}*{color}&nbsp;[#object]
&nbsp;&nbsp;;
bq. See [Class objects|Classes and Inheritance#Class objects]
{{undocumented}}
{anchor:constructor}\[{color:grey}Used by [#memberDeclaration]{color}\]
*constructor*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:green}*{{"this"}}*{color}&nbsp;[#valueParameters]&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#initializer]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*\)*{color}&nbsp;[#block]{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:valueParameters}\[{color:grey}Used by [#enumEntry], [#function], [#constructor]{color}\]
*valueParameters*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#functionParameter]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{")"}}*{color}&nbsp;
&nbsp;&nbsp;;
{anchor:functionParameter}\[{color:grey}Used by [#valueParameters], [#class]{color}\]
*functionParameter*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:blue}*\(*{color}{color:green}*{{"val"}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"var"}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#parameter]&nbsp;{color:blue}*\(*{color}{color:green}*{{"="}}*{color}&nbsp;[#expression]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:initializer}\[{color:grey}Used by [#enumEntry], [#constructor]{color}\]
*initializer*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]&nbsp;{color:green}*{{"this"}}*{color}&nbsp;[#valueArguments]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]&nbsp;[#constructorInvocation]&nbsp;
&nbsp;&nbsp;;
{anchor:block}\[{color:grey}Used by [#catchBlock], [#anonymousInitializer], [#functionBody], [#try], [#finallyBlock], [#constructor]{color}\]
*block*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\{"}}*{color}&nbsp;[#statements]&nbsp;{color:green}*{{"}"}}*{color}
&nbsp;&nbsp;;
{anchor:function}\[{color:grey}Used by [#memberDeclaration], [#declaration], [#toplevelObject]{color}\]
*function*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:green}*{{"fun"}}*{color}&nbsp;[#typeParameters]{color:blue}*?*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{color:blue}*\(*{color}[#type]&nbsp;{color:green}*{{"."}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;[#annotations]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#SimpleName]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#typeParameters]{color:blue}*?*{color}&nbsp;[#valueParameters]&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#type]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#typeConstraints]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#functionBody]{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:functionBody}\[{color:grey}Used by [#getter], [#setter], [#function]{color}\]
*functionBody*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#block]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"="}}*{color}&nbsp;[#expression]
&nbsp;&nbsp;;
{anchor:property}\[{color:grey}Used by [#memberDeclaration], [#declaration], [#toplevelObject]{color}\]
*property*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:blue}*\(*{color}{color:green}*{{"val"}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"var"}}*{color}{color:blue}*\)*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#typeParameters]{color:blue}*?*{color}&nbsp;{color:blue}*\(*{color}[#type]&nbsp;{color:green}*{{"."}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;[#annotations]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#SimpleName]&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#type]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#typeConstraints]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{color:blue}*\(*{color}{color:green}*{{"="}}*{color}&nbsp;[#expression]&nbsp;[#SEMI]{color:blue}*?*{color}{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{color:blue}*\(*{color}[#getter]{color:blue}*?*{color}&nbsp;[#setter]{color:blue}*?*{color}&nbsp;{color:blue}*|*{color}&nbsp;[#setter]{color:blue}*?*{color}&nbsp;[#getter]{color:blue}*?*{color}{color:blue}*\)*{color}&nbsp;[#SEMI]{color:blue}*?*{color}
&nbsp;&nbsp;;
bq. See [Properties and Fields]
{anchor:getter}\[{color:grey}Used by [#property]{color}\]
*getter*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:green}*{{"get"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:green}*{{"get"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;{color:green}*{{")"}}*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#type]{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#functionBody]
&nbsp;&nbsp;;
{anchor:setter}\[{color:grey}Used by [#property]{color}\]
*setter*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:green}*{{"set"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;{color:green}*{{"set"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#modifiers]&nbsp;{color:blue}*\(*{color}[#SimpleName]&nbsp;{color:blue}*|*{color}&nbsp;[#parameter]{color:blue}*\)*{color}&nbsp;{color:green}*{{")"}}*{color}&nbsp;[#functionBody]
&nbsp;&nbsp;;
{anchor:parameter}\[{color:grey}Used by [#functionType], [#tupleType], [#setter], [#functionParameter]{color}\]
*parameter*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#SimpleName]&nbsp;{color:green}*{{":"}}*{color}&nbsp;[#type]
&nbsp;&nbsp;;
{anchor:object}\[{color:grey}Used by [#memberDeclaration], [#declaration], [#toplevelObject], [#classObject]{color}\]
*object*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"object"}}*{color}&nbsp;[#SimpleName]&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#delegationSpecifier]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#classBody]{color:blue}*?*{color}&nbsp;
bq. See [Object expressions and Declarations]
h3. Enum classes
bq. See [Enum classes]
{anchor:enumClassBody}\[{color:grey}Used by [#class]{color}\]
*enumClassBody*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\{"}}*{color}&nbsp;[#enumEntry]{color:blue}*\**{color}&nbsp;{color:green}*{{"}"}}*{color}
&nbsp;&nbsp;;
{anchor:enumEntry}\[{color:grey}Used by [#enumClassBody]{color}\]
*enumEntry*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifiers]&nbsp;[#SimpleName]&nbsp;[#typeParameters]{color:blue}*?*{color}&nbsp;[#valueParameters]{color:blue}*?*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#initializer]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#typeConstraints]&nbsp;[#classBody]{color:blue}*?*{color}
&nbsp;&nbsp;;
h2. Types
bq. See [Types]
{anchor:type}\[{color:grey}Used by [#simpleUserType], [#decomposerPattern], [#getter], [#tupleType], [#for], [#atomicExpression], [#property], [#typeArguments], [#typedef], [#function], [#functionLiteral], [#parameter], [#pattern], [#functionType], [#binding], [#typeConstraint]{color}\]
*type*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]&nbsp;[#typeDescriptor]
{anchor:typeDescriptor}\[{color:grey}Used by [#nullableType], [#typeDescriptor], [#type]{color}\]
*typeDescriptor*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#typeDescriptor]&nbsp;{color:green}*{{")"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#selfType]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#functionType]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#userType]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#tupleType]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#nullableType]
&nbsp;&nbsp;;
{anchor:nullableType}\[{color:grey}Used by [#typeDescriptor]{color}\]
*nullableType*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#typeDescriptor]&nbsp;{color:green}*{{"?"}}*{color}
{anchor:selfType}\[{color:grey}Used by [#typeDescriptor]{color}\]
*selfType*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"This"}}*{color}
&nbsp;&nbsp;;
{anchor:userType}\[{color:grey}Used by [#typeParameter], [#catchBlock], [#typeDescriptor], [#constructorInvocation], [#explicitDelegation]{color}\]
*userType*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{"namespace"}}*{color}&nbsp;{color:green}*{{"."}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#simpleUserType]{color:blue}*\{*{color}{color:green}*{{"."}}*{color}{color:blue}*\}*{color}
&nbsp;&nbsp;;
{anchor:simpleUserType}\[{color:grey}Used by [#userType]{color}\]
*simpleUserType*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#SimpleName]&nbsp;{color:blue}*\(*{color}{color:green}*{{"<"}}*{color}&nbsp;{color:blue}*\(*{color}[#optionalProjection]&nbsp;[#type]&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"\*"}}*{color}{color:blue}*\)*{color}{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{">"}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:optionalProjection}\[{color:grey}Used by [#simpleUserType]{color}\]
*optionalProjection*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#varianceAnnotation]
&nbsp;&nbsp;;
{anchor:functionType}\[{color:grey}Used by [#typeDescriptor]{color}\]
*functionType*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:blue}*\(*{color}[#type]&nbsp;{color:green}*{{"."}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;{color:blue}*\(*{color}[#parameter]&nbsp;{color:blue}*|*{color}&nbsp;[#modifiers]&nbsp;&nbsp;[#type]{color:blue}*\)*{color}{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{")"}}*{color}&nbsp;{color:green}*{{"->"}}*{color}&nbsp;[#type]{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:tupleType}\[{color:grey}Used by [#typeDescriptor]{color}\]
*tupleType*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"#"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#type]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{")"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"#"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#parameter]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{")"}}*{color}&nbsp;
&nbsp;&nbsp;;
h2. Control structures
bq. See [Control structures]
{anchor:if}\[{color:grey}Used by [#atomicExpression]{color}\]
*if*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"if"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#expression]&nbsp;{color:green}*{{")"}}*{color}&nbsp;[#expression]&nbsp;[#SEMI]{color:blue}*?*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{"else"}}*{color}&nbsp;[#expression]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:try}\[{color:grey}Used by [#atomicExpression]{color}\]
*try*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"try"}}*{color}&nbsp;[#block]&nbsp;[#catchBlock]{color:blue}*\**{color}&nbsp;[#finallyBlock]{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:catchBlock}\[{color:grey}Used by [#try]{color}\]
*catchBlock*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"catch"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#annotations]&nbsp;[#SimpleName]&nbsp;{color:green}*{{":"}}*{color}&nbsp;[#userType]&nbsp;{color:green}*{{")"}}*{color}&nbsp;[#block]
&nbsp;&nbsp;;
{anchor:finallyBlock}\[{color:grey}Used by [#try]{color}\]
*finallyBlock*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"finally"}}*{color}&nbsp;[#block]
&nbsp;&nbsp;;
{anchor:loop}\[{color:grey}Used by [#atomicExpression]{color}\]
*loop*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#for]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#while]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#doWhile]
&nbsp;&nbsp;;
{anchor:for}\[{color:grey}Used by [#loop]{color}\]
*for*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"for"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#annotations]&nbsp;{color:blue}*\(*{color}{color:green}*{{"val"}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"var"}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#SimpleName]&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#type]{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{"in"}}*{color}&nbsp;[#expression]&nbsp;{color:green}*{{")"}}*{color}&nbsp;[#expression]
&nbsp;&nbsp;;
{anchor:while}\[{color:grey}Used by [#loop]{color}\]
*while*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"while"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#expression]&nbsp;{color:green}*{{")"}}*{color}&nbsp;[#expression]
&nbsp;&nbsp;;
{anchor:doWhile}\[{color:grey}Used by [#loop]{color}\]
*doWhile*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"do"}}*{color}&nbsp;[#expression]&nbsp;{color:green}*{{"while"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#expression]&nbsp;{color:green}*{{")"}}*{color}
&nbsp;&nbsp;;
h2. Expressions
bq. See [Expressions]
h3. Precedence
||*Precedence*||Title||Symbols||
|Highest|Postfix|{{\+\+}}, {{\-\-}}, {{.}}, {{?.}}, {{?}}|
| |Prefix|{{-}}, {{\+}}, {{\+\+}}, {{\-\-}}, {{!}}, [{{@label}}|#LabelName], {{@}}, {{@@}} |
| |Type RHS|{{:}}, {{as}}, {{as?}} |
| |Multiplicative|{{*}}, {{/}}, {{%}} |
| |Additive|{{\+}}, {{-}} |
| |Range|{{..}} |
| |Infix function|[{{SimpleName}}|#SimpleName] |
| |Elvis|{{?:}} |
| |Named checks|{{in}}, {{\!in}}, {{is}}, {{\!is}} |
| |Comparison|{{<}}, {{>}}, {{<=}}, {{>=}} |
| |Equality|{{==}}, {{\!==}}|
| |Conjunction|{{&&}}|
| |Disjunction|{{\|\|}}|
|Lowest|Assignment|{{=}}, {{+=}}, {{-=}}, {{*=}}, {{/=}}, {{%=}}|
h3. Rules
{anchor:expression}\[{color:grey}Used by [#tupleLiteral], [#for], [#atomicExpression], [#longTemplate], [#whenCondition], [#functionBody], [#doWhile], [#property], [#script], [#explicitDelegation], [#jump], [#while], [#whenEntry], [#arrayAccess], [#statement], [#if], [#when], [#binding], [#valueArguments], [#functionParameter]{color}\]
*expression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#disjunction]&nbsp;{color:blue}*\(*{color}[#assignmentOperator]&nbsp;[#disjunction]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:disjunction}\[{color:grey}Used by [#expression]{color}\]
*disjunction*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#conjunction]&nbsp;{color:blue}*\(*{color}{color:green}*{{"||"}}*{color}&nbsp;[#conjunction]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:conjunction}\[{color:grey}Used by [#disjunction]{color}\]
*conjunction*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#equalityComparison]&nbsp;{color:blue}*\(*{color}{color:green}*{{"&&"}}*{color}&nbsp;[#equalityComparison]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:equalityComparison}\[{color:grey}Used by [#conjunction]{color}\]
*equalityComparison*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#comparison]&nbsp;{color:blue}*\(*{color}[#equalityOperation]&nbsp;[#comparison]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:comparison}\[{color:grey}Used by [#equalityComparison]{color}\]
*comparison*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#namedInfix]&nbsp;{color:blue}*\(*{color}[#comparisonOperation]&nbsp;[#namedInfix]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:namedInfix}\[{color:grey}Used by [#comparison]{color}\]
*namedInfix*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#elvisExpression]&nbsp;{color:blue}*\(*{color}[#inOperation]&nbsp;[#elvisExpression]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#elvisExpression]&nbsp;{color:blue}*\(*{color}[#isOperation]&nbsp;[#isRHS]{color:blue}*\)*{color}{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:elvisExpression}\[{color:grey}Used by [#namedInfix], [#decomposerPattern]{color}\]
*elvisExpression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#infixFunctionCall]&nbsp;{color:blue}*\(*{color}{color:green}*{{"?:"}}*{color}&nbsp;[#infixFunctionCall]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:infixFunctionCall}\[{color:grey}Used by [#elvisExpression]{color}\]
*infixFunctionCall*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#rangeExpression]&nbsp;{color:blue}*\(*{color}[#SimpleName]&nbsp;[#rangeExpression]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:rangeExpression}\[{color:grey}Used by [#infixFunctionCall]{color}\]
*rangeExpression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#additiveExpression]&nbsp;{color:blue}*\(*{color}{color:green}*{{".."}}*{color}&nbsp;[#additiveExpression]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:additiveExpression}\[{color:grey}Used by [#rangeExpression]{color}\]
*additiveExpression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#multiplicativeExpression]&nbsp;{color:blue}*\(*{color}[#additiveOperation]&nbsp;[#multiplicativeExpression]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:multiplicativeExpression}\[{color:grey}Used by [#additiveExpression]{color}\]
*multiplicativeExpression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#typeRHS]&nbsp;{color:blue}*\(*{color}[#multiplicativeOperation]&nbsp;[#typeRHS]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:typeRHS}\[{color:grey}Used by [#multiplicativeExpression]{color}\]
*typeRHS*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#prefixUnaryExpression]&nbsp;{color:blue}*\(*{color}[#typeOperation]&nbsp;[#prefixUnaryExpression]{color:blue}*\)*{color}{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:prefixUnaryExpression}\[{color:grey}Used by [#typeRHS]{color}\]
*prefixUnaryExpression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#prefixUnaryOperation]{color:blue}*\**{color}&nbsp;[#postfixUnaryExpression]
&nbsp;&nbsp;;
{anchor:postfixUnaryExpression}\[{color:grey}Used by [#prefixUnaryExpression], [#postfixUnaryOperation]{color}\]
*postfixUnaryExpression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#atomicExpression]&nbsp;[#postfixUnaryOperation]{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:atomicExpression}\[{color:grey}Used by [#postfixUnaryExpression]{color}\]
*atomicExpression*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;[#expression]&nbsp;{color:green}*{{")"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#literalConstant]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#functionLiteral]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#tupleLiteral]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"this"}}*{color}&nbsp;[#label]{color:blue}*?*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"super"}}*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{"<"}}*{color}&nbsp;[#type]&nbsp;{color:green}*{{">"}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#label]{color:blue}*?*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#if]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#when]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#try]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#objectLiteral]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#jump]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#loop]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#SimpleName]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#FieldName]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"namespace"}}*{color}&nbsp;
&nbsp;&nbsp;;
{anchor:label}\[{color:grey}Used by [#callSuffix], [#prefixUnaryOperation], [#atomicExpression], [#jump]{color}\]
*label*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"@"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"@@"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#LabelName]
&nbsp;&nbsp;;
{anchor:literalConstant}\[{color:grey}Used by [#atomicExpression], [#constantPattern]{color}\]
*literalConstant*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"true"}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"false"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#stringTemplate]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#NoEscapeString]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#IntegerLiteral]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#HexadecimalLiteral]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#CharacterLiteral]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#FloatLiteral]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"null"}}*{color}
&nbsp;&nbsp;;
{anchor:stringTemplate}\[{color:grey}Used by [#literalConstant]{color}\]
*stringTemplate*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\""}}*{color}&nbsp;[#stringTemplateElement]{color:blue}*\**{color}&nbsp;{color:green}*{{"\""}}*{color}
&nbsp;&nbsp;;
{anchor:stringTemplateElement}\[{color:grey}Used by [#stringTemplate]{color}\]
*stringTemplateElement*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;(!) *Undeclared!* [#RegularStringPart]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;(!) *Undeclared!* [#ShortTemplateEntrySTART]&nbsp;{color:blue}*\(*{color}[#SimpleName]&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"this"}}*{color}{color:blue}*\)*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;(!) *Undeclared!* [#EscapeSequence]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#longTemplate]
&nbsp;&nbsp;;
{anchor:longTemplate}\[{color:grey}Used by [#stringTemplateElement]{color}\]
*longTemplate*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"$\{"}}*{color}&nbsp;[#expression]&nbsp;{color:green}*{{"}"}}*{color}
&nbsp;&nbsp;;
{anchor:isRHS}\[{color:grey}Used by [#namedInfix], [#whenCondition]{color}\]
*isRHS*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#pattern]
&nbsp;&nbsp;;
{anchor:declaration}\[{color:grey}Used by [#statement]{color}\]
*declaration*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#function]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#property]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#class]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#typedef]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#object]
&nbsp;&nbsp;;
{anchor:statement}\[{color:grey}Used by [#statements]{color}\]
*statement*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#declaration]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#expression]
&nbsp;&nbsp;;
{anchor:multiplicativeOperation}\[{color:grey}Used by [#multiplicativeExpression]{color}\]
*multiplicativeOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\*"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"/"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"%"}}*{color}
&nbsp;&nbsp;;
{anchor:additiveOperation}\[{color:grey}Used by [#additiveExpression]{color}\]
*additiveOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"+"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"-"}}*{color}
&nbsp;&nbsp;;
{anchor:inOperation}\[{color:grey}Used by [#namedInfix]{color}\]
*inOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"in"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\!in"}}*{color}
&nbsp;&nbsp;;
{anchor:typeOperation}\[{color:grey}Used by [#typeRHS]{color}\]
*typeOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"as"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"as?"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{":"}}*{color}
&nbsp;&nbsp;;
{anchor:isOperation}\[{color:grey}Used by [#namedInfix]{color}\]
*isOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"is"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\!is"}}*{color}
&nbsp;&nbsp;;
{anchor:comparisonOperation}\[{color:grey}Used by [#comparison]{color}\]
*comparisonOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"<"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{">"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{">="}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"<="}}*{color}
&nbsp;&nbsp;;
{anchor:equalityOperation}\[{color:grey}Used by [#equalityComparison]{color}\]
*equalityOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\!="}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"=="}}*{color}
&nbsp;&nbsp;;
{anchor:assignmentOperator}\[{color:grey}Used by [#expression]{color}\]
*assignmentOperator*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"="}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"+="}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"-="}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\*="}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"/="}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"%="}}*{color}
&nbsp;&nbsp;;
{anchor:prefixUnaryOperation}\[{color:grey}Used by [#prefixUnaryExpression]{color}\]
*prefixUnaryOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"-"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"+"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"++"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"--"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\!"}}*{color}&nbsp;&nbsp;
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]&nbsp;
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#label]
&nbsp;&nbsp;;
{anchor:postfixUnaryOperation}\[{color:grey}Used by [#postfixUnaryExpression]{color}\]
*postfixUnaryOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"++"}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"--"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#callSuffix]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#arrayAccess]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#memberAccessOperation]&nbsp;[#postfixUnaryExpression]&nbsp;
&nbsp;&nbsp;;
{anchor:callSuffix}\[{color:grey}Used by [#constructorInvocation], [#postfixUnaryOperation]{color}\]
*callSuffix*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#typeArguments]{color:blue}*?*{color}&nbsp;[#valueArguments]&nbsp;{color:blue}*\(*{color}[#label]{color:blue}*?*{color}&nbsp;[#functionLiteral]{color:blue}*\)*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#typeArguments]&nbsp;{color:blue}*\(*{color}[#label]{color:blue}*?*{color}&nbsp;[#functionLiteral]{color:blue}*\)*{color}
&nbsp;&nbsp;;
{anchor:memberAccessOperation}\[{color:grey}Used by [#postfixUnaryOperation]{color}\]
*memberAccessOperation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"."}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"?."}}*{color}&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"?"}}*{color}
&nbsp;&nbsp;;
{anchor:typeArguments}\[{color:grey}Used by [#callSuffix], [#decomposerPattern], [#annotationEntry]{color}\]
*typeArguments*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"<"}}*{color}&nbsp;[#type]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{">"}}*{color}
&nbsp;&nbsp;;
{anchor:valueArguments}\[{color:grey}Used by [#callSuffix], [#annotationEntry], [#initializer]{color}\]
*valueArguments*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;{color:blue}*\(*{color}[#SimpleName]&nbsp;{color:green}*{{"="}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#expression]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{")"}}*{color}
&nbsp;&nbsp;;
{anchor:jump}\[{color:grey}Used by [#atomicExpression]{color}\]
*jump*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"throw"}}*{color}&nbsp;[#expression]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"return"}}*{color}&nbsp;[#label]{color:blue}*?*{color}&nbsp;[#expression]{color:blue}*?*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"continue"}}*{color}&nbsp;[#label]{color:blue}*?*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"break"}}*{color}&nbsp;[#label]{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:tupleLiteral}\[{color:grey}Used by [#atomicExpression]{color}\]
*tupleLiteral*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"#"}}*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;{color:blue}*\(*{color}{color:blue}*\(*{color}{color:blue}*\(*{color}[#SimpleName]&nbsp;{color:green}*{{"="}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#expression]{color:blue}*\)*{color}{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{")"}}*{color}
&nbsp;&nbsp;;
{anchor:functionLiteral}\[{color:grey}Used by [#callSuffix], [#atomicExpression]{color}\]
*functionLiteral*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\{"}}*{color}&nbsp;[#statements]&nbsp;{color:green}*{{"}"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\{"}}*{color}&nbsp;{color:blue}*\(*{color}[#modifiers]&nbsp;[#SimpleName]{color:blue}*\)*{color}{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{"->"}}*{color}&nbsp;[#statements]&nbsp;{color:green}*{{"}"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\{"}}*{color}&nbsp;{color:blue}*\(*{color}[#type]&nbsp;{color:green}*{{"."}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;{color:blue}*\(*{color}[#modifiers]&nbsp;[#SimpleName]&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#type]{color:blue}*\)*{color}{color:blue}*?*{color}{color:blue}*\)*{color}{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{")"}}*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{":"}}*{color}&nbsp;[#type]{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{"->"}}*{color}&nbsp;[#statements]&nbsp;{color:green}*{{"}"}}*{color}
&nbsp;&nbsp;;
{anchor:statements}\[{color:grey}Used by [#block], [#functionLiteral]{color}\]
*statements*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#SEMI]{color:blue}*\**{color}&nbsp;[#statement]{color:blue}*\{*{color}[#SEMI]{color:blue}*+*{color}{color:blue}*\}*{color}&nbsp;[#SEMI]{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:constructorInvocation}\[{color:grey}Used by [#delegationSpecifier], [#initializer]{color}\]
*constructorInvocation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#userType]&nbsp;[#callSuffix]
&nbsp;&nbsp;;
{anchor:arrayAccess}\[{color:grey}Used by [#postfixUnaryOperation]{color}\]
*arrayAccess*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\["}}*{color}&nbsp;[#expression]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{"]"}}*{color}
&nbsp;&nbsp;;
{anchor:objectLiteral}\[{color:grey}Used by [#atomicExpression]{color}\]
*objectLiteral*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"object"}}*{color}&nbsp;{color:green}*{{":"}}*{color}&nbsp;[#delegationSpecifier]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*?*{color}&nbsp;[#classBody]&nbsp;
&nbsp;&nbsp;;
h4. Pattern matching
bq. See [Pattern matching]
{anchor:when}\[{color:grey}Used by [#atomicExpression]{color}\]
*when*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"when"}}*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{"("}}*{color}&nbsp;{color:blue}*\(*{color}[#modifiers]&nbsp;{color:green}*{{"val"}}*{color}&nbsp;[#SimpleName]&nbsp;{color:green}*{{"="}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#expression]&nbsp;{color:green}*{{")"}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{"\{"}}*{color}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[#whenEntry]{color:blue}*\**{color}
&nbsp;&nbsp;&nbsp;&nbsp;{color:green}*{{"}"}}*{color}
&nbsp;&nbsp;;
{anchor:whenEntry}\[{color:grey}Used by [#when]{color}\]
*whenEntry*
&nbsp;&nbsp;
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#whenCondition]{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}&nbsp;{color:green}*{{"->"}}*{color}&nbsp;[#expression]&nbsp;[#SEMI]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"else"}}*{color}&nbsp;{color:green}*{{"->"}}*{color}&nbsp;[#expression]&nbsp;[#SEMI]
&nbsp;&nbsp;;
{anchor:whenCondition}\[{color:grey}Used by [#whenEntry]{color}\]
*whenCondition*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#expression]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{"in"}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"\!in"}}*{color}{color:blue}*\)*{color}&nbsp;[#expression]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:blue}*\(*{color}{color:green}*{{"is"}}*{color}&nbsp;{color:blue}*|*{color}&nbsp;{color:green}*{{"\!is"}}*{color}{color:blue}*\)*{color}&nbsp;[#isRHS]
&nbsp;&nbsp;;
{anchor:pattern}\[{color:grey}Used by [#isRHS], [#pattern], [#binding], [#tuplePattern]{color}\]
*pattern*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]&nbsp;[#pattern]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#type]&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#tuplePattern]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#decomposerPattern]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#constantPattern]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#bindingPattern]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\*"}}*{color}&nbsp;
&nbsp;&nbsp;;
{anchor:decomposerPattern}\[{color:grey}Used by [#pattern]{color}\]
*decomposerPattern*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#type]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#elvisExpression]&nbsp;[#typeArguments]{color:blue}*?*{color}&nbsp;[#tuplePattern]
&nbsp;&nbsp;;
{anchor:constantPattern}\[{color:grey}Used by [#pattern]{color}\]
*constantPattern*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#literalConstant]
&nbsp;&nbsp;;
{anchor:tuplePattern}\[{color:grey}Used by [#pattern], [#decomposerPattern]{color}\]
*tuplePattern*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"("}}*{color}&nbsp;{color:blue}*\(*{color}{color:blue}*\(*{color}{color:blue}*\(*{color}[#SimpleName]&nbsp;{color:green}*{{"="}}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;[#pattern]{color:blue}*\)*{color}{color:blue}*\{*{color}{color:green}*{{","}}*{color}{color:blue}*\}*{color}{color:blue}*\)*{color}{color:blue}*?*{color}&nbsp;{color:green}*{{")"}}*{color}
&nbsp;&nbsp;;
{anchor:bindingPattern}\[{color:grey}Used by [#pattern]{color}\]
*bindingPattern*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"val"}}*{color}&nbsp;[#SimpleName]&nbsp;[#binding]{color:blue}*?*{color}
&nbsp;&nbsp;;
{anchor:binding}\[{color:grey}Used by [#bindingPattern]{color}\]
*binding*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"is"}}*{color}&nbsp;[#pattern]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\!is"}}*{color}&nbsp;[#pattern]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"in"}}*{color}&nbsp;[#expression]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\!in"}}*{color}&nbsp;[#expression]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{":"}}*{color}&nbsp;[#type]
&nbsp;&nbsp;;
h2. Modifiers
{anchor:modifiers}\[{color:grey}Used by [#typeParameter], [#getter], [#packageHeader], [#class], [#property], [#typedef], [#functionLiteral], [#function], [#functionType], [#when], [#setter], [#enumEntry], [#classObject], [#functionParameter], [#constructor]{color}\]
*modifiers*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#modifier]{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:modifier}\[{color:grey}Used by [#modifiers]{color}\]
*modifier*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#classModifier]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#accessModifier]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#varianceAnnotation]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#memberModifier]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#parameterKind]
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotations]
&nbsp;&nbsp;;
{anchor:classModifier}\[{color:grey}Used by [#modifier]{color}\]
*classModifier*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"abstract"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"final"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"enum"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"open"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"attribute"}}*{color}
&nbsp;&nbsp;;
{anchor:memberModifier}\[{color:grey}Used by [#modifier]{color}\]
*memberModifier*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"override"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"open"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"final"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"abstract"}}*{color}
&nbsp;&nbsp;;
{anchor:accessModifier}\[{color:grey}Used by [#modifier]{color}\]
*accessModifier*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"private"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"protected"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"public"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"internal"}}*{color}
&nbsp;&nbsp;;
{anchor:varianceAnnotation}\[{color:grey}Used by [#modifier], [#optionalProjection]{color}\]
*varianceAnnotation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"in"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"out"}}*{color}
&nbsp;&nbsp;;
{anchor:parameterKind}\[{color:grey}Used by [#modifier]{color}\]
*parameterKind*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"lazy"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"out"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"ref"}}*{color}
&nbsp;&nbsp;;
h2. Annotations
{anchor:annotations}\[{color:grey}Used by [#modifier], [#catchBlock], [#pattern], [#prefixUnaryOperation], [#for], [#class], [#property], [#type], [#typeConstraint], [#function], [#initializer]{color}\]
*annotations*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotation]{color:blue}*\**{color}
&nbsp;&nbsp;;
{anchor:annotation}\[{color:grey}Used by [#annotations]{color}\]
*annotation*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"\["}}*{color}&nbsp;[#annotationEntry]{color:blue}*+*{color}&nbsp;{color:green}*{{"]"}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#annotationEntry]
&nbsp;&nbsp;;
{anchor:annotationEntry}\[{color:grey}Used by [#annotation]{color}\]
*annotationEntry*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#SimpleName]{color:blue}*\{*{color}{color:green}*{{"."}}*{color}{color:blue}*\}*{color}&nbsp;[#typeArguments]{color:blue}*?*{color}&nbsp;[#valueArguments]{color:blue}*?*{color}
&nbsp;&nbsp;;
h1. Lexical structure
{{helper}}
{anchor:Digit}\[{color:grey}Used by [#IntegerLiteral], [#HexDigit]{color}\]
*Digit*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:blue}*\[*{color}{color:green}*{{"0"}}*{color}{color:blue}*.*{color}{color:blue}*.*{color}{color:green}*{{"9"}}*{color}{color:blue}*\]*{color};
{anchor:IntegerLiteral}\[{color:grey}Used by [#literalConstant]{color}\]
*IntegerLiteral*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#Digit]{color:blue}*+*{color}{color:blue}*?*{color}
{anchor:FloatLiteral}\[{color:grey}Used by [#literalConstant]{color}\]
*FloatLiteral*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{<java double literal>}}*{color};
{{helper}}
{anchor:HexDigit}\[{color:grey}Used by [#HexadecimalLiteral]{color}\]
*HexDigit*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;[#Digit]&nbsp;{color:blue}*|*{color}&nbsp;{color:blue}*\[*{color}{color:green}*{{"A"}}*{color}{color:blue}*.*{color}{color:blue}*.*{color}{color:green}*{{"F"}}*{color},&nbsp;{color:green}*{{"a"}}*{color}{color:blue}*.*{color}{color:blue}*.*{color}{color:green}*{{"f"}}*{color}{color:blue}*\]*{color};
{anchor:HexadecimalLiteral}\[{color:grey}Used by [#literalConstant]{color}\]
*HexadecimalLiteral*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"0x"}}*{color}&nbsp;[#HexDigit]{color:blue}*+*{color};
{anchor:CharacterLiteral}\[{color:grey}Used by [#literalConstant]{color}\]
*CharacterLiteral*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{<character as in Java>}}*{color};
bq. See [Basic types]
{anchor:StringWithTemplates}*StringWithTemplates*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{<single-quoted string, $ can be escaped>}}*{color};
{anchor:NoEscapeString}\[{color:grey}Used by [#literalConstant]{color}\]
*NoEscapeString*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{<"""-quoted string>}}*{color};
bq. See [String templates|Strings#Templates]
{anchor:SEMI}\[{color:grey}Used by [#whenEntry], [#if], [#statements], [#packageHeader], [#property], [#import]{color}\]
*SEMI*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{<semicolon or newline>}}*{color};
{anchor:SimpleName}\[{color:grey}Used by [#typeParameter], [#for], [#LabelName], [#package], [#packageHeader], [#object], [#function], [#parameter], [#FieldName], [#bindingPattern], [#when], [#setter], [#import], [#valueArguments], [#tupleLiteral], [#catchBlock], [#simpleUserType], [#atomicExpression], [#class], [#property], [#tuplePattern], [#typedef], [#annotationEntry], [#infixFunctionCall], [#functionLiteral], [#enumEntry], [#stringTemplateElement], [#typeConstraint]{color}\]
*SimpleName*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{<java identifier>}}*{color}
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"`"}}*{color}&nbsp;{color:green}*{{<java identifier>}}*{color}&nbsp;{color:green}*{{"`"}}*{color}
&nbsp;&nbsp;;
bq. See [Java interoperability]
{anchor:FieldName}\[{color:grey}Used by [#atomicExpression]{color}\]
*FieldName*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"$"}}*{color}&nbsp;[#SimpleName];
bq. See [Properties And Fields]
{anchor:LabelName}\[{color:grey}Used by [#label]{color}\]
*LabelName*
&nbsp;&nbsp;{color:blue}*:*{color}&nbsp;{color:green}*{{"@"}}*{color}&nbsp;[#SimpleName];
bq. See [Returns and jumps]