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

Once

static Int Once

ParserFlagsMask

static Int ParserFlagsMask

ProtectionMask

static Int ProtectionMask

Readonly

static Int Readonly

err

override CompilerErr err(Str msg, Location loc := null)

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>