logo
class

compiler::Parser

sys::Obj
  compiler::CompilerSupport
    compiler::Parser

Parser is responsible for parsing a list of tokens into the abstract syntax tree. At this point the CompilationUnit, Usings, and TypeDefs are already populated by the ScanForUsingAndTypes step.

Slots

ParserFlagsMask

static const Int ParserFlagsMask

ProtectionMask

static const Int ProtectionMask

Readonly

static const Int Readonly

err

virtual CompilerErr err(Str msg, Location loc := def)

make

new make(Compiler compiler, CompilationUnit unit, ClosureExpr[] closures)

Construct the parser for the specified compilation unit.

parse

Void parse()

Top level parse a compilation unit:

<compilationUnit>  :=  [<usings>] <typeDef>*
typeDef

Void typeDef()

TypeDef:

<typeDef>      :=  <classDef> | <mixinDef> | <enumDef>

<classDef>     :=  <classHeader> <classBody>
<classHeader>  :=  [<doc>] <facets> <typeFlags> "class" [<inheritance>]
<classFlags>   :=  [<protection>] ["abstract"] ["final"]
<classBody>    :=  "{" <slotDefs> "}"

<enumDef>      :=  <enumHeader> <enumBody>
<enumHeader>   :=  [<doc>] <facets> <protection> "enum" [<inheritance>]
<enumBody>     :=  "{" <enumDefs> <slotDefs> "}"

<mixinDef>     :=  <enumHeader> <enumBody>
<mixinHeader>  :=  [<doc>] <facets> <protection> "mixin" [<inheritance>]
<mixinBody>    :=  "{" <slotDefs> "}"

<protection>   :=  "public" | "protected" | "private" | "internal"
<inheritance>  :=  ":" <typeList>