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 := 2147483648

Source

ParserFlagsMask

static Int ParserFlagsMask := Readonly

Source

ProtectionMask

static Int ProtectionMask := FConst.Public | compiler::FConst.Protected) | compiler::FConst.Private) | compiler::FConst.Internal)

Source

Readonly

static Int Readonly := 1073741824

Source

err

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

Source

make

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

Construct the parser for the specified compilation unit.

Source

parse

Void parse()

Top level parse a compilation unit:

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

Source

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>

Source