Repository: sjbarag/brs
Pull request #507 (2020-08-17 23:35:19)

feat: Make AST compatible with ESLint
ESLint is a popular pluggable linter that semi-relies on a standardized
AST format called ESTree. This change makes the ast brs produces compliant
with ESLint by exposing a few fields the linter needs to walk the tree
and evaluate rules.

* Statements and Expressions now extend a new class called AstNode

heftyfunseeker: > Changes look good, can you elaborate a little bit on how ESLinter would use the AST? is it like an argument that you can pass to the linter cli?

Yeah, ESLint supports custom parsers. So you can tell ESLint to call your parser, and as long you provide a few of the properties the `Traverser` is looking for on each node, it will walk your tree and build up a queue of nodes to evaluate linter rules for. https://eslint.org/docs/developer-guide/working-with-custom-parsers, https://eslint.org/docs/developer-guide/working-with-rules. 

Patch:
diff --git a/src/LexerParser.ts b/src/LexerParser.ts
index c3c7498..b9f8c5d 100644
--- a/src/LexerParser.ts
+++ b/src/LexerParser.ts
@@ -19,47 +19,66 @@ export function getLexerParserFn(
     options: Partial<ExecutionOptions>
 ) {
     const executionOptions = Object.assign(defaultExecutionOptions, options);
+    /**
+     * Map file URIs to promises. The promises resolve to an array of that file's statements.
+     * This allows us to only parse each file once.
+     */
+    let memoizedStatements = new Map<string, Promise<Stmt.Statement[]>>();
     return async function parse(filenames: string[]): Promise<Stmt.Statement[]> {
-        let parsedFiles = await pSettle(
-            filenames.map(async (filename) => {
-                let contents;
-                try {
-                    contents = await readFile(filename, "utf-8");
-                } catch (err) {
-                    return Promise.reject({
-                        message: `brs: can't open file '${filename}': [Errno ${err.errno}]`,
-                    });
-                }
+        async function lexAndParseFile(filename: string) {
+            let contents;
+            try {
+                contents = await readFile(filename, "utf-8");
+            } catch (err) {
+                return Promise.reject({
+                    message: `brs: can't open file '${filename}': [Errno ${err.errno}]`,
+                });
+            }
 
-                let lexer = new Lexer();
-                let preprocessor = new PP.Preprocessor();
-                let parser = new Parser();
-                [lexer, preprocessor, parser].forEach((emitter) =>
-                    emitter.onError(BrsError.getLoggerUsing(executionOptions.stderr))
-                );
+            let lexer = new Lexer();
+            let preprocessor = new PP.Preprocessor();
+            let parser = new Parser();
+            [lexer, preprocessor, parser].forEach((emitter) =>
+                emitter.onError(BrsError.getLoggerUsing(executionOptions.stderr))
+            );
 
-                let scanResults = lexer.scan(contents, filename);
-                if (scanResults.errors.length > 0) {
-                    return Promise.reject({
-                        message: "Error occurred during lexing",
-                    });
-                }
+            let scanResults = lexer.scan(contents, filename);
+            if (scanResults.errors.length > 0) {
+                return Promise.reject({
+                    message: "Error occurred during lexing",
+                });
+            }
 
-                let preprocessResults = preprocessor.preprocess(scanResults.tokens, manifest);
-                if (preprocessResults.errors.length > 0) {
-                    return Promise.reject({
-                        message: "Error occurred during pre-processing",
-                    });
-                }
+            let preprocessResults = preprocessor.preprocess(scanResults.tokens, manifest);
+            if (preprocessResults.errors.length > 0) {
+                return Promise.reject({
+                    message: "Error occurred during pre-processing",
+                });
+            }
 
-                let parseResults = parser.parse(preprocessResults.processedTokens);
-                if (parseResults.errors.length > 0) {
-                    return Promise.reject({
-                        message: "Error occurred parsing",
-                    });
-                }
+            let parseResults = parser.parse(preprocessResults.processedTokens);
+            if (parseResults.errors.length > 0) {
+                return Promise.reject({
+                    message: "Error occurred parsing",
+                });
+            }
 
-                return Promise.resolve(parseResults.statements);
+            return Promise.resolve(parseResults.statements);
+        }
+
+        let parsedFiles = await pSettle(
+            filenames.map(async (filename) => {
+                let maybeStatements = memoizedStatements.get(filename);
+                if (maybeStatements) {
+                    return maybeStatements;
+                } else {
+                    let statementsPromise = lexAndParseFile(filename);
+                    if (!memoizedStatements.has(filename)) {
+                        memoizedStatements.set(filename, statementsPromise);
+                    }
+
+                    return statementsPromise;
+                }
             })
         );
 
diff --git a/src/parser/AstNode.ts b/src/parser/AstNode.ts
new file mode 100644
index 0000000..599c1d7
--- /dev/null
+++ b/src/parser/AstNode.ts
@@ -0,0 +1,23 @@
+import { Location } from "../lexer";
+
+/**
+ * ABC (that's minimally compliant with ESLint/ESTree) for all nodes within
+ * the AST generated by our parser.
+ */
+export abstract class AstNode {
+    readonly type!: string;
+
+    /** @param type should match the name of the derived class */
+    constructor(type: string) {
+        this.type = type;
+    }
+
+    /** Currently only used by ESLint for walking the tree */
+    public parent: AstNode | undefined;
+
+    /** Alias for location used by ESLint */
+    public get loc() {
+        return this.location;
+    }
+    public location!: Location;
+}
diff --git a/src/parser/ComponentScopeResolver.ts b/src/parser/ComponentScopeResolver.ts
index a22cd85..078fac4 100644
--- a/src/parser/ComponentScopeResolver.ts
+++ b/src/parser/ComponentScopeResolver.ts
@@ -5,13 +5,6 @@ import { BrsComponentName } from "../brsTypes";
 export class ComponentScopeResolver {
     private readonly excludedNames: string[] = ["init"];
 
-    /**
-     * A map of file URIs to a promise that resolves to an array of that file's statements.
-     * Used primary to avoid re-lexing and re-parsing files that are included
-     * in <script /> tags in multiple components.
-     */
-    private memoizedStatements = new Map<string, Promise<Stmt.Statement[]>>();
-
     /**
      * @param componentMap Component definition map to reference for function resolution.
      * @param parserLexerFn Function used to parse statements out of given components
@@ -70,9 +63,7 @@ export class ComponentScopeResolver {
      * @returns An ordered array of component statement arrays.
      */
     private *getStatements(component: ComponentDefinition) {
-        for (const statements of this.fetchMemoizedStatements(component.scripts)) {
-            yield statements;
-        }
+        yield this.parserLexerFn(component.scripts.map((c) => c.uri));
 
         let currentComponent: ComponentDefinition | undefined = component;
         while (currentComponent.extends) {
@@ -92,33 +83,9 @@ export class ComponentScopeResolver {
                 );
                 return Promise.resolve();
             }
-            for (const statements of this.fetchMemoizedStatements(currentComponent.scripts)) {
-                yield statements;
-            }
+            yield this.parserLexerFn(currentComponent.scripts.map((c) => c.uri));
         }
 
         return Promise.resolve();
     }
-
-    /**
-     * Generator function that fetches statements from an array of script files without repeatedly
-     * lexing, preprocessing, and parsing files (via memoization).
-     * @param scripts the array of scripts to get statements for
-     * @yields promises that each resolve to an array of statements; one promise per file in `scripts`.
-     */
-    private *fetchMemoizedStatements(scripts: ComponentScript[]) {
-        for (let { uri } of scripts) {
-            let maybeStatements = this.memoizedStatements.get(uri);
-            if (maybeStatements) {
-                yield maybeStatements;
-            } else {
-                let statementsPromise = this.parserLexerFn([uri]);
-                if (!this.memoizedStatements.has(uri)) {
-                    this.memoizedStatements.set(uri, statementsPromise);
-                }
-
-                yield statementsPromise;
-            }
-        }
-    }
 }
diff --git a/src/parser/Expression.ts b/src/parser/Expression.ts
index 79c190b..f47c24d 100644
--- a/src/parser/Expression.ts
+++ b/src/parser/Expression.ts
@@ -1,6 +1,7 @@
 import { Token, Identifier, Location } from "../lexer";
 import { BrsType, Argument, ValueKind, BrsString } from "../brsTypes";
-import { Block } from "./Statement";
+import { Block, Statement } from "./Statement";
+import { AstNode } from "./AstNode";
 
 export interface Visitor<T> {
     visitBinary(expression: Binary): T;
@@ -29,8 +30,10 @@ export interface Expression {
     location: Location;
 }
 
-export class Binary implements Expression {
-    constructor(readonly left: Expression, readonly token: Token, readonly right: Expression) {}
+export class Binary extends AstNode implements Expression {
+    constructor(readonly left: Expression, readonly token: Token, readonly right: Expression) {
+        super("Binary");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitBinary(this);
@@ -45,14 +48,16 @@ export class Binary implements Expression {
     }
 }
 
-export class Call implements Expression {
+export class Call extends AstNode implements Expression {
     static MaximumArguments = 32;
 
     constructor(
         readonly callee: Expression,
         readonly closingParen: Token,
         readonly args: Expression[]
-    ) {}
+    ) {
+        super("Call");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitCall(this);
@@ -67,14 +72,16 @@ export class Call implements Expression {
     }
 }
 
-export class Function implements Expression {
+export class Function extends AstNode implements Expression {
     constructor(
         readonly parameters: ReadonlyArray<Argument>,
         readonly returns: ValueKind,
         readonly body: Block,
         readonly keyword: Token,
         readonly end: Token
-    ) {}
+    ) {
+        super("Function");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitAnonymousFunction(this);
@@ -89,8 +96,10 @@ export class Function implements Expression {
     }
 }
 
-export class DottedGet implements Expression {
-    constructor(readonly obj: Expression, readonly name: Identifier) {}
+export class DottedGet extends AstNode implements Expression {
+    constructor(readonly obj: Expression, readonly name: Identifier) {
+        super("DottedGet");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitDottedGet(this);
@@ -105,12 +114,14 @@ export class DottedGet implements Expression {
     }
 }
 
-export class IndexedGet implements Expression {
+export class IndexedGet extends AstNode implements Expression {
     constructor(
         readonly obj: Expression,
         readonly index: Expression,
         readonly closingSquare: Token
-    ) {}
+    ) {
+        super("IndexedGet");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitIndexedGet(this);
@@ -125,14 +136,16 @@ export class IndexedGet implements Expression {
     }
 }
 
-export class Grouping implements Expression {
+export class Grouping extends AstNode implements Expression {
     constructor(
         readonly tokens: {
             left: Token;
             right: Token;
         },
         readonly expression: Expression
-    ) {}
+    ) {
+        super("Grouping");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitGrouping(this);
@@ -147,8 +160,10 @@ export class Grouping implements Expression {
     }
 }
 
-export class Literal implements Expression {
-    constructor(readonly value: BrsType, readonly _location: Location | undefined) {}
+export class Literal extends AstNode implements Expression {
+    constructor(readonly value: BrsType, readonly _location: Location | undefined) {
+        super("Literal");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitLiteral(this);
@@ -171,8 +186,10 @@ export class Literal implements Expression {
     }
 }
 
-export class ArrayLiteral implements Expression {
-    constructor(readonly elements: Expression[], readonly open: Token, readonly close: Token) {}
+export class ArrayLiteral extends AstNode implements Expression {
+    constructor(readonly elements: Expression[], readonly open: Token, readonly close: Token) {
+        super("ArrayLiteral");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitArrayLiteral(this);
@@ -195,8 +212,10 @@ export interface AAMember {
     value: Expression;
 }
 
-export class AALiteral implements Expression {
-    constructor(readonly elements: AAMember[], readonly open: Token, readonly close: Token) {}
+export class AALiteral extends AstNode implements Expression {
+    constructor(readonly elements: AAMember[], readonly open: Token, readonly close: Token) {
+        super("AALiteral");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitAALiteral(this);
@@ -211,8 +230,10 @@ export class AALiteral implements Expression {
     }
 }
 
-export class Unary implements Expression {
-    constructor(readonly operator: Token, readonly right: Expression) {}
+export class Unary extends AstNode implements Expression {
+    constructor(readonly operator: Token, readonly right: Expression) {
+        super("Unary");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitUnary(this);
@@ -227,8 +248,10 @@ export class Unary implements Expression {
     }
 }
 
-export class Variable implements Expression {
-    constructor(readonly name: Identifier) {}
+export class Variable extends AstNode implements Expression {
+    constructor(readonly name: Identifier) {
+        super("Variable");
+    }
 
     accept<R>(visitor: Visitor<R>): R {
         return visitor.visitVariable(this);
diff --git a/src/parser/Parser.ts b/src/parser/Parser.ts
index 545de9f..366c76d 100644
--- a/src/parser/Parser.ts
+++ b/src/parser/Parser.ts
@@ -860,6 +860,7 @@ export class Parser {
                     }
 
                     elseIfBranches.push({
+                        type: "ElseIf",
                         condition: elseIfCondition,
                         thenBranch: elseIfThen,
                     });
@@ -928,6 +929,7 @@ export class Parser {
                     }
 
                     elseIfBranches.push({
+                        type: "ElseIf",
                         condition: elseIfCondition,
                         thenBranch: new Stmt.Block([elseIfThen], peek().location),
                     });
diff --git a/src/parser/Statement.ts b/src/parser/Statement.ts
index 6042abd..e4b5a8e 100644
--- a/src/parser/Statement.ts
+++ b/src/parser/Statement.ts
@@ -2,6 +2,7 @@ import * as Expr from "./Expression";
 import { Token, Identifier, Location, Lexeme } from "../lexer";
 import { BrsType, BrsInvalid } from "../brsTypes";
 import { InvalidZone } from "luxon";
+import { AstNode } from "./AstNode";
 
 /** A set of reasons why a `Block` stopped executing. */
 export * from "./BlockEndReason";
@@ -39,14 +40,16 @@ export interface Statement {
     location: Location;
 }
 
-export class Assignment implements Statement {
+export class Assignment extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             equals: Token;
         },
         readonly name: Identifier,
         readonly value: Expr.Expression
-    ) {}
+    ) {
+        super("Assignment");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitAssignment(this);
@@ -61,16 +64,20 @@ export class Assignment implements Statement {
     }
 }
 
-export class Block implements Statement {
-    constructor(readonly statements: ReadonlyArray<Statement>, readonly location: Location) {}
+export class Block extends AstNode implements Statement {
+    constructor(readonly statements: ReadonlyArray<Statement>, readonly location: Location) {
+        super("Block");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitBlock(this);
     }
 }
 
-export class Expression implements Statement {
-    constructor(readonly expression: Expr.Expression) {}
+export class Expression extends AstNode implements Statement {
+    constructor(readonly expression: Expr.Expression) {
+        super("Expression");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitExpression(this);
@@ -81,12 +88,14 @@ export class Expression implements Statement {
     }
 }
 
-export class ExitFor implements Statement {
+export class ExitFor extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             exitFor: Token;
         }
-    ) {}
+    ) {
+        super("ExitFor");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitExitFor(this);
@@ -97,12 +106,14 @@ export class ExitFor implements Statement {
     }
 }
 
-export class ExitWhile implements Statement {
+export class ExitWhile extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             exitWhile: Token;
         }
-    ) {}
+    ) {
+        super("ExitWhile");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitExitWhile(this);
@@ -113,8 +124,10 @@ export class ExitWhile implements Statement {
     }
 }
 
-export class Function implements Statement {
-    constructor(readonly name: Identifier, readonly func: Expr.Function) {}
+export class Function extends AstNode implements Statement {
+    constructor(readonly name: Identifier, readonly func: Expr.Function) {
+        super("Function");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitNamedFunction(this);
@@ -132,9 +145,11 @@ export class Function implements Statement {
 export interface ElseIf {
     condition: Expr.Expression;
     thenBranch: Block;
+    /** Signal to ESLint to walk condition and thenBranch */
+    type: string;
 }
 
-export class If implements Statement {
+export class If extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             if: Token;
@@ -149,7 +164,9 @@ export class If implements Statement {
         readonly thenBranch: Block,
         readonly elseIfs: ElseIf[],
         readonly elseBranch?: Block
-    ) {}
+    ) {
+        super("If");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitIf(this);
@@ -176,8 +193,10 @@ export class If implements Statement {
     }
 }
 
-export class Increment implements Statement {
-    constructor(readonly value: Expr.Expression, readonly token: Token) {}
+export class Increment extends AstNode implements Statement {
+    constructor(readonly value: Expr.Expression, readonly token: Token) {
+        super("Increment");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitIncrement(this);
@@ -208,7 +227,7 @@ export namespace PrintSeparator {
 /**
  * Represents a `print` statement within BrightScript.
  */
-export class Print implements Statement {
+export class Print extends AstNode implements Statement {
     /**
      * Creates a new internal representation of a BrightScript `print` statement.
      * @param expressions an array of expressions or `PrintSeparator`s to be
@@ -219,7 +238,9 @@ export class Print implements Statement {
             print: Token;
         },
         readonly expressions: (Expr.Expression | Token)[]
-    ) {}
+    ) {
+        super("Print");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitPrint(this);
@@ -238,15 +259,17 @@ export class Print implements Statement {
     }
 }
 
-export class Goto implements Statement {
+export class Goto extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             goto: Token;
             label: Token;
         }
-    ) {}
+    ) {
+        super("Goto");
+    }
 
-    accept<R>(visitor: Visitor<R>): BrsType {
+    accept<R>(_visitor: Visitor<R>): BrsType {
         //should search the code for the corresponding label, and set that as the next line to execute
         throw new Error("Not implemented");
     }
@@ -260,15 +283,17 @@ export class Goto implements Statement {
     }
 }
 
-export class Label implements Statement {
+export class Label extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             identifier: Token;
             colon: Token;
         }
-    ) {}
+    ) {
+        super("Label");
+    }
 
-    accept<R>(visitor: Visitor<R>): BrsType {
+    accept<R>(_visitor: Visitor<R>): BrsType {
         throw new Error("Not implemented");
     }
 
@@ -281,13 +306,15 @@ export class Label implements Statement {
     }
 }
 
-export class Return implements Statement {
+export class Return extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             return: Token;
         },
         readonly value?: Expr.Expression
-    ) {}
+    ) {
+        super("Return");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitReturn(this);
@@ -302,14 +329,16 @@ export class Return implements Statement {
     }
 }
 
-export class End implements Statement {
+export class End extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             end: Token;
         }
-    ) {}
+    ) {
+        super("End");
+    }
 
-    accept<R>(visitor: Visitor<R>): BrsType {
+    accept<R>(_visitor: Visitor<R>): BrsType {
         //TODO implement this in the runtime. It should immediately terminate program execution, without error
         throw new Error("Not implemented");
     }
@@ -323,14 +352,16 @@ export class End implements Statement {
     }
 }
 
-export class Stop implements Statement {
+export class Stop extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             stop: Token;
         }
-    ) {}
+    ) {
+        super("Stop");
+    }
 
-    accept<R>(visitor: Visitor<R>): BrsType {
+    accept<R>(_visitor: Visitor<R>): BrsType {
         //TODO implement this in the runtime. It should pause code execution until a `c` command is issued from the console
         throw new Error("Not implemented");
     }
@@ -344,7 +375,7 @@ export class Stop implements Statement {
     }
 }
 
-export class For implements Statement {
+export class For extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             for: Token;
@@ -356,7 +387,9 @@ export class For implements Statement {
         readonly finalValue: Expr.Expression,
         readonly increment: Expr.Expression,
         readonly body: Block
-    ) {}
+    ) {
+        super("For");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitFor(this);
@@ -371,7 +404,7 @@ export class For implements Statement {
     }
 }
 
-export class ForEach implements Statement {
+export class ForEach extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             forEach: Token;
@@ -381,7 +414,9 @@ export class ForEach implements Statement {
         readonly item: Token,
         readonly target: Expr.Expression,
         readonly body: Block
-    ) {}
+    ) {
+        super("ForEach");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitForEach(this);
@@ -396,7 +431,7 @@ export class ForEach implements Statement {
     }
 }
 
-export class While implements Statement {
+export class While extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             while: Token;
@@ -404,7 +439,9 @@ export class While implements Statement {
         },
         readonly condition: Expr.Expression,
         readonly body: Block
-    ) {}
+    ) {
+        super("While");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitWhile(this);
@@ -419,12 +456,14 @@ export class While implements Statement {
     }
 }
 
-export class DottedSet implements Statement {
+export class DottedSet extends AstNode implements Statement {
     constructor(
         readonly obj: Expr.Expression,
         readonly name: Identifier,
         readonly value: Expr.Expression
-    ) {}
+    ) {
+        super("DottedSet");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitDottedSet(this);
@@ -439,13 +478,15 @@ export class DottedSet implements Statement {
     }
 }
 
-export class IndexedSet implements Statement {
+export class IndexedSet extends AstNode implements Statement {
     constructor(
         readonly obj: Expr.Expression,
         readonly index: Expr.Expression,
         readonly value: Expr.Expression,
         readonly closingSquare: Token
-    ) {}
+    ) {
+        super("IndexedSet");
+    }
 
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitIndexedSet(this);
@@ -460,13 +501,16 @@ export class IndexedSet implements Statement {
     }
 }
 
-export class Library implements Statement {
+export class Library extends AstNode implements Statement {
     constructor(
         readonly tokens: {
             library: Token;
             filePath: Token | undefined;
         }
-    ) {}
+    ) {
+        super("Library");
+    }
+
     accept<R>(visitor: Visitor<R>): BrsType {
         return visitor.visitLibrary(this);
     }


Test patch:
diff --git a/test/parser/controlFlow/__snapshots__/For.test.js.snap b/test/parser/controlFlow/__snapshots__/For.test.js.snap
index aca5d51..d9af7e6 100644
--- a/test/parser/controlFlow/__snapshots__/For.test.js.snap
+++ b/test/parser/controlFlow/__snapshots__/For.test.js.snap
@@ -16,6 +16,7 @@ Array [
         },
       },
       "statements": Array [],
+      "type": "Block",
     },
     "counterDeclaration": Assignment {
       "name": Object {
@@ -52,6 +53,7 @@ Array [
           "text": "=",
         },
       },
+      "type": "Assignment",
       "value": Literal {
         "_location": Object {
           "end": Object {
@@ -63,6 +65,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 0,
@@ -80,6 +83,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 5,
@@ -96,6 +100,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 2,
@@ -167,6 +172,7 @@ Array [
         "text": "to",
       },
     },
+    "type": "For",
   },
 ]
 `;
@@ -187,6 +193,7 @@ Array [
         },
       },
       "statements": Array [],
+      "type": "Block",
     },
     "counterDeclaration": Assignment {
       "name": Object {
@@ -223,6 +230,7 @@ Array [
           "text": "=",
         },
       },
+      "type": "Assignment",
       "value": Literal {
         "_location": Object {
           "end": Object {
@@ -234,6 +242,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 0,
@@ -251,6 +260,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 5,
@@ -267,6 +277,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 1,
@@ -323,6 +334,7 @@ Array [
         "text": "to",
       },
     },
+    "type": "For",
   },
 ]
 `;
@@ -343,6 +355,7 @@ Array [
         },
       },
       "statements": Array [],
+      "type": "Block",
     },
     "counterDeclaration": Assignment {
       "name": Object {
@@ -379,6 +392,7 @@ Array [
           "text": "=",
         },
       },
+      "type": "Assignment",
       "value": Literal {
         "_location": Object {
           "end": Object {
@@ -390,6 +404,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 0,
@@ -407,6 +422,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 5,
@@ -423,6 +439,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 1,
@@ -479,6 +496,7 @@ Array [
         "text": "to",
       },
     },
+    "type": "For",
   },
 ]
 `;
diff --git a/test/parser/controlFlow/__snapshots__/ForEach.test.js.snap b/test/parser/controlFlow/__snapshots__/ForEach.test.js.snap
index 00c10de..d7d1e58 100644
--- a/test/parser/controlFlow/__snapshots__/ForEach.test.js.snap
+++ b/test/parser/controlFlow/__snapshots__/ForEach.test.js.snap
@@ -16,6 +16,7 @@ Array [
         },
       },
       "statements": Array [],
+      "type": "Block",
     },
     "item": Object {
       "isReserved": false,
@@ -50,6 +51,7 @@ Array [
         },
         "text": "lipsum",
       },
+      "type": "Variable",
     },
     "tokens": Object {
       "endFor": Object {
@@ -101,6 +103,7 @@ Array [
         "text": "in",
       },
     },
+    "type": "ForEach",
   },
 ]
 `;
@@ -121,6 +124,7 @@ Array [
         },
       },
       "statements": Array [],
+      "type": "Block",
     },
     "item": Object {
       "isReserved": false,
@@ -155,6 +159,7 @@ Array [
         },
         "text": "lipsum",
       },
+      "type": "Variable",
     },
     "tokens": Object {
       "endFor": Object {
@@ -206,6 +211,7 @@ Array [
         "text": "in",
       },
     },
+    "type": "ForEach",
   },
 ]
 `;
diff --git a/test/parser/controlFlow/__snapshots__/If.test.js.snap b/test/parser/controlFlow/__snapshots__/If.test.js.snap
index da98c6b..97a1df0 100644
--- a/test/parser/controlFlow/__snapshots__/If.test.js.snap
+++ b/test/parser/controlFlow/__snapshots__/If.test.js.snap
@@ -16,6 +16,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -33,6 +34,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -55,6 +57,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -106,6 +109,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -118,6 +122,7 @@ Array [
                 "line": 8,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -125,6 +130,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [
       Object {
@@ -141,6 +147,7 @@ Array [
                 "line": 4,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -158,6 +165,7 @@ Array [
                 "line": 4,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -180,6 +188,7 @@ Array [
             },
             "text": ">",
           },
+          "type": "Binary",
         },
         "thenBranch": Block {
           "location": Object {
@@ -231,6 +240,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -243,6 +253,7 @@ Array [
                     "line": 5,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 3,
@@ -286,6 +297,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -298,6 +310,7 @@ Array [
                     "line": 6,
                   },
                 },
+                "type": "Literal",
                 "value": BrsBoolean {
                   "kind": 2,
                   "value": true,
@@ -305,7 +318,9 @@ Array [
               },
             },
           ],
+          "type": "Block",
         },
+        "type": "ElseIf",
       },
     ],
     "thenBranch": Block {
@@ -358,6 +373,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -370,6 +386,7 @@ Array [
                 "line": 3,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -377,6 +394,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [
@@ -434,6 +452,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -454,6 +473,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -471,6 +491,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -493,6 +514,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": undefined,
     "elseIfs": Array [],
@@ -546,6 +568,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -558,6 +581,7 @@ Array [
                 "line": 3,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -601,6 +625,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -613,6 +638,7 @@ Array [
                 "line": 4,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -620,6 +646,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -675,6 +702,7 @@ Array [
         "text": "THEN",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -695,6 +723,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -712,6 +741,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -734,6 +764,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -785,6 +816,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -797,6 +829,7 @@ Array [
                 "line": 5,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -840,6 +873,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -852,6 +886,7 @@ Array [
                 "line": 6,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -859,6 +894,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [],
     "thenBranch": Block {
@@ -911,6 +947,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -923,6 +960,7 @@ Array [
                 "line": 3,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -930,6 +968,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -985,6 +1024,7 @@ Array [
         "text": "then",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -1005,6 +1045,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -1022,6 +1063,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -1044,6 +1086,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -1095,6 +1138,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -1107,6 +1151,7 @@ Array [
                 "line": 8,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -1114,6 +1159,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [
       Object {
@@ -1130,6 +1176,7 @@ Array [
                 "line": 4,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -1147,6 +1194,7 @@ Array [
                 "line": 4,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -1169,6 +1217,7 @@ Array [
             },
             "text": ">",
           },
+          "type": "Binary",
         },
         "thenBranch": Block {
           "location": Object {
@@ -1220,6 +1269,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -1232,6 +1282,7 @@ Array [
                     "line": 5,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 3,
@@ -1275,6 +1326,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -1287,6 +1339,7 @@ Array [
                     "line": 6,
                   },
                 },
+                "type": "Literal",
                 "value": BrsBoolean {
                   "kind": 2,
                   "value": true,
@@ -1294,7 +1347,9 @@ Array [
               },
             },
           ],
+          "type": "Block",
         },
+        "type": "ElseIf",
       },
     ],
     "thenBranch": Block {
@@ -1347,6 +1402,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -1359,6 +1415,7 @@ Array [
                 "line": 3,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -1366,6 +1423,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [
@@ -1439,6 +1497,7 @@ Array [
         "text": "then",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -1473,6 +1532,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1505,6 +1565,7 @@ Array [
                           "line": 8,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsString {
                         "kind": 3,
                         "value": "else",
@@ -1530,8 +1591,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "elseIfs": Array [
               Object {
@@ -1547,6 +1610,7 @@ Array [
                       "line": 5,
                     },
                   },
+                  "type": "Literal",
                   "value": BrsBoolean {
                     "kind": 2,
                     "value": true,
@@ -1579,6 +1643,7 @@ Array [
                               "line": 6,
                             },
                           },
+                          "type": "Literal",
                           "value": BrsString {
                             "kind": 3,
                             "value": "true",
@@ -1604,9 +1669,12 @@ Array [
                           "text": "print",
                         },
                       },
+                      "type": "Print",
                     },
                   ],
+                  "type": "Block",
                 },
+                "type": "ElseIf",
               },
             ],
             "thenBranch": Block {
@@ -1636,6 +1704,7 @@ Array [
                           "line": 4,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsBoolean {
                         "kind": 2,
                         "value": false,
@@ -1661,8 +1730,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "tokens": Object {
               "elseIfs": Array [
@@ -1736,8 +1807,10 @@ Array [
                 "text": "then",
               },
             },
+            "type": "If",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1775,6 +1848,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -1793,6 +1867,7 @@ Array [
       },
       "text": "a",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -1813,6 +1888,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -1830,6 +1906,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -1852,6 +1929,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": undefined,
     "elseIfs": Array [],
@@ -1888,6 +1966,7 @@ Array [
               "text": "return",
             },
           },
+          "type": "Return",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -1900,6 +1979,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -1907,6 +1987,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -1930,6 +2011,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -1950,6 +2032,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -1967,6 +2050,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -1989,6 +2073,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": undefined,
     "elseIfs": Array [],
@@ -2025,6 +2110,7 @@ Array [
               "text": "return",
             },
           },
+          "type": "Return",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -2037,6 +2123,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -2044,6 +2131,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -2083,6 +2171,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -2126,6 +2215,7 @@ Array [
                 "text": "return",
               },
             },
+            "type": "Return",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2138,6 +2228,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2145,6 +2236,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2182,6 +2274,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -2200,6 +2293,7 @@ Array [
       },
       "text": "missingendif",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -2220,6 +2314,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -2237,6 +2332,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -2259,6 +2355,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -2293,6 +2390,7 @@ Array [
               "text": "return",
             },
           },
+          "type": "Return",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -2305,6 +2403,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -2312,6 +2411,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [],
     "thenBranch": Block {
@@ -2347,6 +2447,7 @@ Array [
               "text": "return",
             },
           },
+          "type": "Return",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -2359,6 +2460,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -2366,6 +2468,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -2405,6 +2508,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -2424,6 +2528,7 @@ Array [
           "line": 2,
         },
       },
+      "type": "Literal",
       "value": BrsBoolean {
         "kind": 2,
         "value": true,
@@ -2496,8 +2601,11 @@ Array [
                 },
                 "text": "m",
               },
+              "type": "Variable",
             },
+            "type": "DottedGet",
           },
+          "type": "DottedSet",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -2510,6 +2618,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -2517,6 +2626,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [],
     "thenBranch": Block {
@@ -2586,8 +2696,11 @@ Array [
                 },
                 "text": "m",
               },
+              "type": "Variable",
             },
+            "type": "DottedGet",
           },
+          "type": "DottedSet",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -2600,6 +2713,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -2607,6 +2721,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -2646,6 +2761,7 @@ Array [
         "text": "then",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -2665,6 +2781,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -2681,6 +2798,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -2702,6 +2820,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -2750,6 +2869,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -2761,6 +2881,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -2768,6 +2889,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [
       Object {
@@ -2783,6 +2905,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -2799,6 +2922,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -2820,6 +2944,7 @@ Array [
             },
             "text": "=",
           },
+          "type": "Binary",
         },
         "thenBranch": Block {
           "location": Object {
@@ -2868,6 +2993,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -2879,6 +3005,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsBoolean {
                   "kind": 2,
                   "value": true,
@@ -2886,7 +3013,9 @@ Array [
               },
             },
           ],
+          "type": "Block",
         },
+        "type": "ElseIf",
       },
     ],
     "thenBranch": Block {
@@ -2936,6 +3065,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -2947,6 +3077,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -2954,6 +3085,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -2976,6 +3108,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -2995,6 +3128,7 @@ Array [
           "line": 2,
         },
       },
+      "type": "Literal",
       "value": BrsBoolean {
         "kind": 2,
         "value": true,
@@ -3013,6 +3147,7 @@ Array [
         },
       },
       "statements": Array [],
+      "type": "Block",
     },
     "elseIfs": Array [],
     "thenBranch": Block {
@@ -3041,6 +3176,7 @@ Array [
                 "line": 3,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -3098,6 +3234,7 @@ Array [
                     "text": "=",
                   },
                 },
+                "type": "Assignment",
                 "value": Literal {
                   "_location": Object {
                     "end": Object {
@@ -3110,6 +3247,7 @@ Array [
                       "line": 3,
                     },
                   },
+                  "type": "Literal",
                   "value": Int32 {
                     "kind": 4,
                     "value": 1,
@@ -3117,6 +3255,7 @@ Array [
                 },
               },
             ],
+            "type": "Block",
           },
           "tokens": Object {
             "elseIfs": Array [],
@@ -3156,8 +3295,10 @@ Array [
               "text": "then",
             },
           },
+          "type": "If",
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -3197,6 +3338,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -3261,8 +3403,11 @@ Array [
                   },
                   "text": "component",
                 },
+                "type": "Variable",
               },
+              "type": "DottedGet",
             },
+            "type": "DottedGet",
           },
         ],
         "callee": Variable {
@@ -3283,6 +3428,7 @@ Array [
             },
             "text": "type",
           },
+          "type": "Variable",
         },
         "closingParen": Object {
           "isReserved": false,
@@ -3301,6 +3447,7 @@ Array [
           },
           "text": ")",
         },
+        "type": "Call",
       },
       "right": Literal {
         "_location": Object {
@@ -3314,6 +3461,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "roString",
@@ -3336,6 +3484,7 @@ Array [
         },
         "text": "=",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -3387,6 +3536,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Call {
             "args": Array [],
             "callee": DottedGet {
@@ -3461,9 +3611,13 @@ Array [
                       },
                       "text": "m",
                     },
+                    "type": "Variable",
                   },
+                  "type": "DottedGet",
                 },
+                "type": "DottedGet",
               },
+              "type": "DottedGet",
             },
             "closingParen": Object {
               "isReserved": false,
@@ -3482,9 +3636,11 @@ Array [
               },
               "text": ")",
             },
+            "type": "Call",
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [
       Object {
@@ -3545,8 +3701,11 @@ Array [
                       },
                       "text": "component",
                     },
+                    "type": "Variable",
                   },
+                  "type": "DottedGet",
                 },
+                "type": "DottedGet",
               },
             ],
             "callee": Variable {
@@ -3567,6 +3726,7 @@ Array [
                 },
                 "text": "type",
               },
+              "type": "Variable",
             },
             "closingParen": Object {
               "isReserved": false,
@@ -3585,6 +3745,7 @@ Array [
               },
               "text": ")",
             },
+            "type": "Call",
           },
           "right": Literal {
             "_location": Object {
@@ -3598,6 +3759,7 @@ Array [
                 "line": 5,
               },
             },
+            "type": "Literal",
             "value": BrsString {
               "kind": 3,
               "value": "roFont",
@@ -3620,6 +3782,7 @@ Array [
             },
             "text": "=",
           },
+          "type": "Binary",
         },
         "thenBranch": Block {
           "location": Object {
@@ -3671,6 +3834,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": DottedGet {
                 "name": Object {
                   "isReserved": false,
@@ -3725,12 +3889,17 @@ Array [
                       },
                       "text": "component",
                     },
+                    "type": "Variable",
                   },
+                  "type": "DottedGet",
                 },
+                "type": "DottedGet",
               },
             },
           ],
+          "type": "Block",
         },
+        "type": "ElseIf",
       },
     ],
     "thenBranch": Block {
@@ -3783,6 +3952,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Call {
             "args": Array [
               DottedGet {
@@ -3839,8 +4009,11 @@ Array [
                       },
                       "text": "component",
                     },
+                    "type": "Variable",
                   },
+                  "type": "DottedGet",
                 },
+                "type": "DottedGet",
               },
             ],
             "callee": DottedGet {
@@ -3897,8 +4070,11 @@ Array [
                     },
                     "text": "m",
                   },
+                  "type": "Variable",
                 },
+                "type": "DottedGet",
               },
+              "type": "DottedGet",
             },
             "closingParen": Object {
               "isReserved": false,
@@ -3917,6 +4093,7 @@ Array [
               },
               "text": ")",
             },
+            "type": "Call",
           },
         },
         If {
@@ -3939,6 +4116,7 @@ Array [
                 },
                 "text": "font",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -3952,6 +4130,7 @@ Array [
                   "line": 4,
                 },
               },
+              "type": "Literal",
               "value": BrsInvalid {
                 "kind": 1,
               },
@@ -3973,6 +4152,7 @@ Array [
               },
               "text": "=",
             },
+            "type": "Binary",
           },
           "elseBranch": undefined,
           "elseIfs": Array [],
@@ -4026,6 +4206,7 @@ Array [
                     "text": "=",
                   },
                 },
+                "type": "Assignment",
                 "value": DottedGet {
                   "name": Object {
                     "isReserved": false,
@@ -4080,11 +4261,15 @@ Array [
                         },
                         "text": "m",
                       },
+                      "type": "Variable",
                     },
+                    "type": "DottedGet",
                   },
+                  "type": "DottedGet",
                 },
               },
             ],
+            "type": "Block",
           },
           "tokens": Object {
             "elseIfs": Array [],
@@ -4124,8 +4309,10 @@ Array [
               "text": "then",
             },
           },
+          "type": "If",
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [
@@ -4183,6 +4370,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -4202,6 +4390,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -4218,6 +4407,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -4239,6 +4429,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": undefined,
     "elseIfs": Array [],
@@ -4289,6 +4480,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -4300,6 +4492,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -4307,6 +4500,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -4344,6 +4538,7 @@ Array [
         "text": "then",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -4363,6 +4558,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -4379,6 +4575,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -4400,6 +4597,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -4448,6 +4646,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -4459,6 +4658,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
@@ -4466,6 +4666,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [],
     "thenBranch": Block {
@@ -4515,6 +4716,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -4526,6 +4728,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -4533,6 +4736,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -4570,6 +4774,7 @@ Array [
         "text": "Then",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -4589,6 +4794,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -4605,6 +4811,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -4626,6 +4833,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": Block {
       "location": Object {
@@ -4674,6 +4882,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -4685,6 +4894,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -4692,6 +4902,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [
       Object {
@@ -4707,6 +4918,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -4723,6 +4935,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -4744,6 +4957,7 @@ Array [
             },
             "text": "=",
           },
+          "type": "Binary",
         },
         "thenBranch": Block {
           "location": Object {
@@ -4792,6 +5006,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -4803,6 +5018,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsBoolean {
                   "kind": 2,
                   "value": true,
@@ -4810,7 +5026,9 @@ Array [
               },
             },
           ],
+          "type": "Block",
         },
+        "type": "ElseIf",
       },
     ],
     "thenBranch": Block {
@@ -4860,6 +5078,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -4871,6 +5090,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -4878,6 +5098,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -4915,6 +5136,7 @@ Array [
         "text": "then",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -4934,6 +5156,7 @@ Array [
           "line": 2,
         },
       },
+      "type": "Literal",
       "value": BrsBoolean {
         "kind": 2,
         "value": false,
@@ -4968,6 +5191,7 @@ Array [
                   "line": 2,
                 },
               },
+              "type": "Literal",
               "value": BrsString {
                 "kind": 3,
                 "value": "true",
@@ -4993,8 +5217,10 @@ Array [
               "text": "print",
             },
           },
+          "type": "Print",
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -5034,6 +5260,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -5053,6 +5280,7 @@ Array [
           "line": 2,
         },
       },
+      "type": "Literal",
       "value": BrsBoolean {
         "kind": 2,
         "value": true,
@@ -5085,6 +5313,7 @@ Array [
                   "line": 2,
                 },
               },
+              "type": "Literal",
               "value": BrsString {
                 "kind": 3,
                 "value": "not run",
@@ -5110,8 +5339,10 @@ Array [
               "text": "print",
             },
           },
+          "type": "Print",
         },
       ],
+      "type": "Block",
     },
     "elseIfs": Array [
       Object {
@@ -5127,6 +5358,7 @@ Array [
               "line": 2,
             },
           },
+          "type": "Literal",
           "value": BrsBoolean {
             "kind": 2,
             "value": true,
@@ -5159,6 +5391,7 @@ Array [
                       "line": 2,
                     },
                   },
+                  "type": "Literal",
                   "value": BrsString {
                     "kind": 3,
                     "value": "not run",
@@ -5184,9 +5417,12 @@ Array [
                   "text": "print",
                 },
               },
+              "type": "Print",
             },
           ],
+          "type": "Block",
         },
+        "type": "ElseIf",
       },
     ],
     "thenBranch": Block {
@@ -5216,6 +5452,7 @@ Array [
                   "line": 2,
                 },
               },
+              "type": "Literal",
               "value": BrsString {
                 "kind": 3,
                 "value": "8 worked",
@@ -5241,8 +5478,10 @@ Array [
               "text": "print",
             },
           },
+          "type": "Print",
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [
@@ -5300,6 +5539,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -5320,6 +5560,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -5337,6 +5578,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -5359,6 +5601,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": undefined,
     "elseIfs": Array [],
@@ -5395,6 +5638,7 @@ Array [
               "text": "return",
             },
           },
+          "type": "Return",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -5407,6 +5651,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -5414,6 +5659,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -5453,6 +5699,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
@@ -5472,6 +5719,7 @@ Array [
           "line": 2,
         },
       },
+      "type": "Literal",
       "value": BrsBoolean {
         "kind": 2,
         "value": true,
@@ -5529,6 +5777,7 @@ Array [
               "text": "=",
             },
           },
+          "type": "Assignment",
           "value": Function {
             "body": Block {
               "location": Object {
@@ -5557,6 +5806,7 @@ Array [
                           "line": 2,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsString {
                         "kind": 3,
                         "value": "yes",
@@ -5582,8 +5832,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "end": Object {
               "isReserved": false,
@@ -5621,9 +5873,11 @@ Array [
             },
             "parameters": Array [],
             "returns": 11,
+            "type": "Function",
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -5679,6 +5933,7 @@ Array [
         "text": "then",
       },
     },
+    "type": "If",
   },
 ]
 `;
@@ -5714,6 +5969,7 @@ Array [
                     "line": 3,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 1,
@@ -5731,6 +5987,7 @@ Array [
                     "line": 3,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 0,
@@ -5753,6 +6010,7 @@ Array [
                 },
                 "text": ">",
               },
+              "type": "Binary",
             },
             "elseBranch": Block {
               "location": Object {
@@ -5781,6 +6039,7 @@ Array [
                           "line": 8,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsString {
                         "kind": 3,
                         "value": "tHaT NuMbEr iS ZeRo",
@@ -5806,8 +6065,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "elseIfs": Array [
               Object {
@@ -5824,6 +6085,7 @@ Array [
                         "line": 5,
                       },
                     },
+                    "type": "Literal",
                     "value": Int32 {
                       "kind": 4,
                       "value": 1,
@@ -5841,6 +6103,7 @@ Array [
                         "line": 5,
                       },
                     },
+                    "type": "Literal",
                     "value": Int32 {
                       "kind": 4,
                       "value": 0,
@@ -5863,6 +6126,7 @@ Array [
                     },
                     "text": "<",
                   },
+                  "type": "Binary",
                 },
                 "thenBranch": Block {
                   "location": Object {
@@ -5891,6 +6155,7 @@ Array [
                               "line": 6,
                             },
                           },
+                          "type": "Literal",
                           "value": BrsString {
                             "kind": 3,
                             "value": "negative!",
@@ -5916,9 +6181,12 @@ Array [
                           "text": "print",
                         },
                       },
+                      "type": "Print",
                     },
                   ],
+                  "type": "Block",
                 },
+                "type": "ElseIf",
               },
             ],
             "thenBranch": Block {
@@ -5948,6 +6216,7 @@ Array [
                           "line": 4,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsString {
                         "kind": 3,
                         "value": "positive!",
@@ -5973,8 +6242,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "tokens": Object {
               "elseIfs": Array [
@@ -6032,8 +6303,10 @@ Array [
               },
               "then": undefined,
             },
+            "type": "If",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -6071,6 +6344,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -6089,6 +6363,7 @@ Array [
       },
       "text": "main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -6109,6 +6384,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -6126,6 +6402,7 @@ Array [
             "line": 2,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -6148,6 +6425,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
     "elseBranch": undefined,
     "elseIfs": Array [],
@@ -6184,6 +6462,7 @@ Array [
               "text": "return",
             },
           },
+          "type": "Return",
           "value": Literal {
             "_location": Object {
               "end": Object {
@@ -6196,6 +6475,7 @@ Array [
                 "line": 2,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": true,
@@ -6203,6 +6483,7 @@ Array [
           },
         },
       ],
+      "type": "Block",
     },
     "tokens": Object {
       "elseIfs": Array [],
@@ -6242,6 +6523,7 @@ Array [
       },
       "then": undefined,
     },
+    "type": "If",
   },
 ]
 `;
diff --git a/test/parser/controlFlow/__snapshots__/While.test.js.snap b/test/parser/controlFlow/__snapshots__/While.test.js.snap
index 9dce3d7..4fe65e5 100644
--- a/test/parser/controlFlow/__snapshots__/While.test.js.snap
+++ b/test/parser/controlFlow/__snapshots__/While.test.js.snap
@@ -29,6 +29,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": BrsString {
                 "kind": 3,
                 "value": "looping",
@@ -53,6 +54,7 @@ Array [
               "text": "print",
             },
           },
+          "type": "Print",
         },
         ExitWhile {
           "tokens": Object {
@@ -73,8 +75,10 @@ Array [
               "text": "exit while",
             },
           },
+          "type": "ExitWhile",
         },
       ],
+      "type": "Block",
     },
     "condition": Literal {
       "_location": Object {
@@ -87,6 +91,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": BrsBoolean {
         "kind": 2,
         "value": true,
@@ -126,6 +131,7 @@ Array [
         "text": "while",
       },
     },
+    "type": "While",
   },
 ]
 `;
@@ -159,6 +165,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": BrsString {
                 "kind": 3,
                 "value": "looping",
@@ -183,8 +190,10 @@ Array [
               "text": "print",
             },
           },
+          "type": "Print",
         },
       ],
+      "type": "Block",
     },
     "condition": Literal {
       "_location": Object {
@@ -197,6 +206,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": BrsBoolean {
         "kind": 2,
         "value": true,
@@ -236,6 +246,7 @@ Array [
         "text": "while",
       },
     },
+    "type": "While",
   },
 ]
 `;
diff --git a/test/parser/expression/__snapshots__/Additive.test.js.snap b/test/parser/expression/__snapshots__/Additive.test.js.snap
index fb9195b..71c7466 100644
--- a/test/parser/expression/__snapshots__/Additive.test.js.snap
+++ b/test/parser/expression/__snapshots__/Additive.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Binary {
         "left": Literal {
@@ -50,6 +51,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 1,
@@ -66,6 +68,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -87,6 +90,7 @@ Array [
           },
           "text": "+",
         },
+        "type": "Binary",
       },
       "right": Literal {
         "_location": Object {
@@ -99,6 +103,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 3,
@@ -120,6 +125,7 @@ Array [
         },
         "text": "+",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -162,6 +168,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Binary {
         "left": Literal {
@@ -175,6 +182,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 1,
@@ -191,6 +199,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -212,6 +221,7 @@ Array [
           },
           "text": "-",
         },
+        "type": "Binary",
       },
       "right": Literal {
         "_location": Object {
@@ -224,6 +234,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 3,
@@ -245,6 +256,7 @@ Array [
         },
         "text": "-",
       },
+      "type": "Binary",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/ArrayLiterals.test.js.snap b/test/parser/expression/__snapshots__/ArrayLiterals.test.js.snap
index 96d1cbc..4143dc3 100644
--- a/test/parser/expression/__snapshots__/ArrayLiterals.test.js.snap
+++ b/test/parser/expression/__snapshots__/ArrayLiterals.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -67,6 +68,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -83,6 +85,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -104,6 +107,7 @@ Array [
             },
             "text": "+",
           },
+          "type": "Binary",
         },
         Unary {
           "operator": Object {
@@ -133,11 +137,13 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": BrsBoolean {
               "kind": 2,
               "value": false,
             },
           },
+          "type": "Unary",
         },
       ],
       "open": Object {
@@ -156,6 +162,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
@@ -198,6 +205,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -245,6 +253,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 1,
@@ -261,6 +270,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 2,
@@ -277,6 +287,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 3,
@@ -299,6 +310,7 @@ Array [
             },
             "text": "[",
           },
+          "type": "ArrayLiteral",
         },
         ArrayLiteral {
           "close": Object {
@@ -329,6 +341,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 4,
@@ -345,6 +358,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -361,6 +375,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 6,
@@ -383,6 +398,7 @@ Array [
             },
             "text": "[",
           },
+          "type": "ArrayLiteral",
         },
       ],
       "open": Object {
@@ -401,6 +417,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
@@ -443,6 +460,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -472,6 +490,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 1,
@@ -488,6 +507,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -504,6 +524,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 3,
@@ -526,6 +547,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
@@ -568,6 +590,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -602,6 +625,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
@@ -644,6 +668,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -678,6 +703,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
@@ -720,6 +746,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -749,6 +776,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 1,
@@ -765,6 +793,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -781,6 +810,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 3,
@@ -803,6 +833,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
@@ -845,6 +876,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -874,6 +906,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 1,
@@ -890,6 +923,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -906,6 +940,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 3,
@@ -928,6 +963,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
@@ -970,6 +1006,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": ArrayLiteral {
       "close": Object {
         "isReserved": false,
@@ -999,6 +1036,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 1,
@@ -1015,6 +1053,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -1031,6 +1070,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 3,
@@ -1053,6 +1093,7 @@ Array [
         },
         "text": "[",
       },
+      "type": "ArrayLiteral",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/AssociativeArrayLiterals.test.js.snap b/test/parser/expression/__snapshots__/AssociativeArrayLiterals.test.js.snap
index 4d26a5a..9f53633 100644
--- a/test/parser/expression/__snapshots__/AssociativeArrayLiterals.test.js.snap
+++ b/test/parser/expression/__snapshots__/AssociativeArrayLiterals.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": AALiteral {
       "close": Object {
         "isReserved": false,
@@ -71,6 +72,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -93,6 +95,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -115,6 +118,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -138,6 +142,7 @@ Array [
         },
         "text": "{",
       },
+      "type": "AALiteral",
     },
   },
 ]
@@ -195,6 +200,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": AALiteral {
               "close": Object {
                 "isReserved": false,
@@ -229,6 +235,7 @@ Array [
                         "line": -9,
                       },
                     },
+                    "type": "Literal",
                     "value": BrsString {
                       "kind": 3,
                       "value": "Bob",
@@ -251,6 +258,7 @@ Array [
                         "line": -9,
                       },
                     },
+                    "type": "Literal",
                     "value": Int32 {
                       "kind": 4,
                       "value": 3,
@@ -274,9 +282,11 @@ Array [
                 },
                 "text": "{",
               },
+              "type": "AALiteral",
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -312,6 +322,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -329,6 +340,7 @@ Array [
       },
       "text": "main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -370,6 +382,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": AALiteral {
       "close": Object {
         "isReserved": false,
@@ -404,6 +417,7 @@ Array [
         },
         "text": "{",
       },
+      "type": "AALiteral",
     },
   },
 ]
@@ -446,6 +460,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": AALiteral {
       "close": Object {
         "isReserved": false,
@@ -480,6 +495,7 @@ Array [
         },
         "text": "{",
       },
+      "type": "AALiteral",
     },
   },
 ]
@@ -522,6 +538,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": AALiteral {
       "close": Object {
         "isReserved": false,
@@ -556,6 +573,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -578,6 +596,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -600,6 +619,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -623,6 +643,7 @@ Array [
         },
         "text": "{",
       },
+      "type": "AALiteral",
     },
   },
 ]
@@ -665,6 +686,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": AALiteral {
       "close": Object {
         "isReserved": false,
@@ -699,6 +721,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -721,6 +744,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -743,6 +767,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -766,6 +791,7 @@ Array [
         },
         "text": "{",
       },
+      "type": "AALiteral",
     },
   },
 ]
@@ -808,6 +834,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": AALiteral {
       "close": Object {
         "isReserved": false,
@@ -842,6 +869,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 1,
@@ -864,6 +892,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -886,6 +915,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -909,6 +939,7 @@ Array [
         },
         "text": "{",
       },
+      "type": "AALiteral",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/Boolean.test.js.snap b/test/parser/expression/__snapshots__/Boolean.test.js.snap
index 9beaf73..47f9d1b 100644
--- a/test/parser/expression/__snapshots__/Boolean.test.js.snap
+++ b/test/parser/expression/__snapshots__/Boolean.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -49,6 +50,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": true,
@@ -65,6 +67,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": false,
@@ -86,6 +89,7 @@ Array [
         },
         "text": "and",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -128,6 +132,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -140,6 +145,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": true,
@@ -156,6 +162,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": false,
@@ -177,6 +184,7 @@ Array [
         },
         "text": "or",
       },
+      "type": "Binary",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/Call.test.js.snap b/test/parser/expression/__snapshots__/Call.test.js.snap
index 21b9a64..0c3539a 100644
--- a/test/parser/expression/__snapshots__/Call.test.js.snap
+++ b/test/parser/expression/__snapshots__/Call.test.js.snap
@@ -16,6 +16,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 1,
@@ -32,6 +33,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -55,6 +57,7 @@ Array [
           },
           "text": "add",
         },
+        "type": "Variable",
       },
       "closingParen": Object {
         "isReserved": false,
@@ -72,7 +75,9 @@ Array [
         },
         "text": ")",
       },
+      "type": "Call",
     },
+    "type": "Expression",
   },
 ]
 `;
@@ -99,6 +104,7 @@ Array [
           },
           "text": "RebootSystem",
         },
+        "type": "Variable",
       },
       "closingParen": Object {
         "isReserved": false,
@@ -116,7 +122,9 @@ Array [
         },
         "text": ")",
       },
+      "type": "Call",
     },
+    "type": "Expression",
   },
 ]
 `;
@@ -175,6 +183,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -187,6 +196,7 @@ Array [
                   "line": 4,
                 },
               },
+              "type": "Literal",
               "value": BrsString {
                 "kind": 3,
                 "value": "bob",
@@ -194,6 +204,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -231,6 +242,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -249,6 +261,7 @@ Array [
       },
       "text": "DoThingOne",
     },
+    "type": "Function",
   },
   Function {
     "func": Function {
@@ -265,6 +278,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -302,6 +316,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -320,6 +335,7 @@ Array [
       },
       "text": "DoThingTwo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -341,6 +357,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -378,6 +395,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -396,6 +414,7 @@ Array [
       },
       "text": "DoThingOne",
     },
+    "type": "Function",
   },
   Function {
     "func": Function {
@@ -412,6 +431,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -449,6 +469,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -467,6 +488,7 @@ Array [
       },
       "text": "DoThingTwo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -493,6 +515,7 @@ Array [
           },
           "text": "RebootSystem",
         },
+        "type": "Variable",
       },
       "closingParen": Object {
         "isReserved": false,
@@ -510,7 +533,9 @@ Array [
         },
         "text": ")",
       },
+      "type": "Call",
     },
+    "type": "Expression",
   },
 ]
 `;
diff --git a/test/parser/expression/__snapshots__/Exponential.test.js.snap b/test/parser/expression/__snapshots__/Exponential.test.js.snap
index 74081d8..0805fdd 100644
--- a/test/parser/expression/__snapshots__/Exponential.test.js.snap
+++ b/test/parser/expression/__snapshots__/Exponential.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -49,6 +50,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -65,6 +67,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 3,
@@ -86,6 +89,7 @@ Array [
         },
         "text": "^",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -128,6 +132,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Binary {
         "left": Literal {
@@ -141,6 +146,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 2,
@@ -157,6 +163,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 3,
@@ -178,6 +185,7 @@ Array [
           },
           "text": "^",
         },
+        "type": "Binary",
       },
       "right": Literal {
         "_location": Object {
@@ -190,6 +198,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 4,
@@ -211,6 +220,7 @@ Array [
         },
         "text": "^",
       },
+      "type": "Binary",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/Function.test.js.snap b/test/parser/expression/__snapshots__/Function.test.js.snap
index af03eff..f2f544e 100644
--- a/test/parser/expression/__snapshots__/Function.test.js.snap
+++ b/test/parser/expression/__snapshots__/Function.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -64,6 +65,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "Lorem ipsum",
@@ -88,8 +90,10 @@ Array [
                 "text": "print",
               },
             },
+            "type": "Print",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -125,6 +129,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -167,6 +172,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -181,6 +187,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -227,6 +234,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -286,6 +294,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 4,
@@ -352,6 +361,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -364,6 +374,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -385,6 +396,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -430,6 +442,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -472,6 +485,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -486,6 +500,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -610,6 +625,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -652,6 +668,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -666,6 +683,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -831,6 +849,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -873,6 +892,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -887,6 +907,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -933,6 +954,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -998,6 +1020,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -1010,6 +1033,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -1031,6 +1055,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -1075,6 +1100,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -1117,6 +1143,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -1131,6 +1158,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1166,6 +1194,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -1208,6 +1237,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -1235,6 +1265,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "Lorem ipsum",
@@ -1259,8 +1290,10 @@ Array [
                 "text": "print",
               },
             },
+            "type": "Print",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1296,6 +1329,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -1338,6 +1372,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -1352,6 +1387,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1387,6 +1423,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
   },
 ]
@@ -1429,6 +1466,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -1443,6 +1481,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1478,6 +1517,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
   },
 ]
@@ -1520,6 +1560,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -1547,6 +1588,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "Lorem ipsum",
@@ -1571,8 +1613,10 @@ Array [
                 "text": "print",
               },
             },
+            "type": "Print",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1608,6 +1652,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
   },
 ]
@@ -1650,6 +1695,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -1664,6 +1710,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1710,6 +1757,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -1769,6 +1817,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 4,
@@ -1835,6 +1884,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -1847,6 +1897,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -1868,6 +1919,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -1913,6 +1965,7 @@ Array [
         },
       ],
       "returns": 11,
+      "type": "Function",
     },
   },
 ]
@@ -1955,6 +2008,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -1969,6 +2023,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2093,6 +2148,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -2135,6 +2191,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -2149,6 +2206,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2314,6 +2372,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -2356,6 +2415,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -2370,6 +2430,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2416,6 +2477,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -2481,6 +2543,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -2493,6 +2556,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -2514,6 +2578,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -2558,6 +2623,7 @@ Array [
         },
       ],
       "returns": 11,
+      "type": "Function",
     },
   },
 ]
@@ -2600,6 +2666,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -2627,6 +2694,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "I'm anonymous",
@@ -2651,8 +2719,10 @@ Array [
                 "text": "print",
               },
             },
+            "type": "Print",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2688,6 +2758,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -2725,6 +2796,7 @@ Array [
                         "line": -9,
                       },
                     },
+                    "type": "Literal",
                     "value": BrsString {
                       "kind": 3,
                       "value": "I'm a callback",
@@ -2749,8 +2821,10 @@ Array [
                     "text": "print",
                   },
                 },
+                "type": "Print",
               },
             ],
+            "type": "Block",
           },
           "end": Object {
             "isReserved": false,
@@ -2786,6 +2860,7 @@ Array [
           },
           "parameters": Array [],
           "returns": 10,
+          "type": "Function",
         },
       ],
       "callee": Variable {
@@ -2805,6 +2880,7 @@ Array [
           },
           "text": "acceptsCallback",
         },
+        "type": "Variable",
       },
       "closingParen": Object {
         "isReserved": false,
@@ -2822,7 +2898,9 @@ Array [
         },
         "text": ")",
       },
+      "type": "Call",
     },
+    "type": "Expression",
   },
 ]
 `;
diff --git a/test/parser/expression/__snapshots__/Indexing.test.js.snap b/test/parser/expression/__snapshots__/Indexing.test.js.snap
index 3035bae..ed15527 100644
--- a/test/parser/expression/__snapshots__/Indexing.test.js.snap
+++ b/test/parser/expression/__snapshots__/Indexing.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": IndexedGet {
       "closingSquare": Object {
         "isReserved": false,
@@ -65,6 +66,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 6,
@@ -98,6 +100,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 0,
@@ -131,6 +134,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -153,9 +157,13 @@ Array [
               },
               "text": "foo",
             },
+            "type": "Variable",
           },
+          "type": "IndexedGet",
         },
+        "type": "IndexedGet",
       },
+      "type": "IndexedGet",
     },
   },
 ]
@@ -198,6 +206,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": DottedGet {
       "name": Object {
         "isReserved": false,
@@ -232,7 +241,9 @@ Array [
           },
           "text": "foo",
         },
+        "type": "Variable",
       },
+      "type": "DottedGet",
     },
   },
 ]
@@ -275,6 +286,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": DottedGet {
       "name": Object {
         "isReserved": false,
@@ -320,6 +332,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 0,
@@ -359,9 +372,13 @@ Array [
               },
               "text": "foo",
             },
+            "type": "Variable",
           },
+          "type": "DottedGet",
         },
+        "type": "IndexedGet",
       },
+      "type": "DottedGet",
     },
   },
 ]
@@ -404,6 +421,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": IndexedGet {
       "closingSquare": Object {
         "isReserved": false,
@@ -432,6 +450,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -454,7 +473,9 @@ Array [
           },
           "text": "foo",
         },
+        "type": "Variable",
       },
+      "type": "IndexedGet",
     },
   },
 ]
@@ -497,6 +518,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": DottedGet {
       "name": Object {
         "isReserved": false,
@@ -531,7 +553,9 @@ Array [
           },
           "text": "foo",
         },
+        "type": "Variable",
       },
+      "type": "DottedGet",
     },
   },
 ]
@@ -574,6 +598,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": IndexedGet {
       "closingSquare": Object {
         "isReserved": false,
@@ -602,6 +627,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -624,7 +650,9 @@ Array [
           },
           "text": "foo",
         },
+        "type": "Variable",
       },
+      "type": "IndexedGet",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/Multiplicative.test.js.snap b/test/parser/expression/__snapshots__/Multiplicative.test.js.snap
index a99513e..ab9b370 100644
--- a/test/parser/expression/__snapshots__/Multiplicative.test.js.snap
+++ b/test/parser/expression/__snapshots__/Multiplicative.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Binary {
         "left": Literal {
@@ -50,6 +51,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 7,
@@ -66,6 +68,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 5,
@@ -87,6 +90,7 @@ Array [
           },
           "text": "/",
         },
+        "type": "Binary",
       },
       "right": Literal {
         "_location": Object {
@@ -99,6 +103,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Float {
           "kind": 6,
           "value": 3,
@@ -120,6 +125,7 @@ Array [
         },
         "text": "/",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -162,6 +168,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Binary {
         "left": Literal {
@@ -175,6 +182,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 32.5,
@@ -191,6 +199,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 5,
@@ -212,6 +221,7 @@ Array [
           },
           "text": "\\\\",
         },
+        "type": "Binary",
       },
       "right": Literal {
         "_location": Object {
@@ -224,6 +234,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Float {
           "kind": 6,
           "value": 3,
@@ -245,6 +256,7 @@ Array [
         },
         "text": "\\\\",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -287,6 +299,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Binary {
         "left": Literal {
@@ -300,6 +313,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 7,
@@ -316,6 +330,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 5,
@@ -337,6 +352,7 @@ Array [
           },
           "text": "MOD",
         },
+        "type": "Binary",
       },
       "right": Literal {
         "_location": Object {
@@ -349,6 +365,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Float {
           "kind": 6,
           "value": 3,
@@ -370,6 +387,7 @@ Array [
         },
         "text": "MOD",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -412,6 +430,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Binary {
         "left": Literal {
@@ -425,6 +444,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 3,
@@ -441,6 +461,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Float {
             "kind": 6,
             "value": 5,
@@ -462,6 +483,7 @@ Array [
           },
           "text": "*",
         },
+        "type": "Binary",
       },
       "right": Literal {
         "_location": Object {
@@ -474,6 +496,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Float {
           "kind": 6,
           "value": 7,
@@ -495,6 +518,7 @@ Array [
         },
         "text": "*",
       },
+      "type": "Binary",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/PrefixUnary.test.js.snap b/test/parser/expression/__snapshots__/PrefixUnary.test.js.snap
index bb49eb4..dc21d93 100644
--- a/test/parser/expression/__snapshots__/PrefixUnary.test.js.snap
+++ b/test/parser/expression/__snapshots__/PrefixUnary.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Unary {
       "operator": Object {
         "isReserved": false,
@@ -133,15 +134,21 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 5,
                 },
               },
+              "type": "Unary",
             },
+            "type": "Unary",
           },
+          "type": "Unary",
         },
+        "type": "Unary",
       },
+      "type": "Unary",
     },
   },
 ]
@@ -184,6 +191,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Unary {
       "operator": Object {
         "isReserved": true,
@@ -280,15 +288,21 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsBoolean {
                   "kind": 2,
                   "value": true,
                 },
               },
+              "type": "Unary",
             },
+            "type": "Unary",
           },
+          "type": "Unary",
         },
+        "type": "Unary",
       },
+      "type": "Unary",
     },
   },
 ]
@@ -331,6 +345,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Unary {
       "operator": Object {
         "isReserved": false,
@@ -359,11 +374,13 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
         },
       },
+      "type": "Unary",
     },
   },
 ]
@@ -406,6 +423,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Unary {
       "operator": Object {
         "isReserved": true,
@@ -434,11 +452,13 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": true,
         },
       },
+      "type": "Unary",
     },
   },
 ]
diff --git a/test/parser/expression/__snapshots__/Primary.test.js.snap b/test/parser/expression/__snapshots__/Primary.test.js.snap
index 2e7630a..4523b0d 100644
--- a/test/parser/expression/__snapshots__/Primary.test.js.snap
+++ b/test/parser/expression/__snapshots__/Primary.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -49,6 +50,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -67,6 +69,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 2,
@@ -83,6 +86,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -104,6 +108,7 @@ Array [
             },
             "text": "*",
           },
+          "type": "Binary",
         },
         "tokens": Object {
           "left": Object {
@@ -139,6 +144,7 @@ Array [
             "text": ")",
           },
         },
+        "type": "Grouping",
       },
       "token": Object {
         "isReserved": false,
@@ -156,6 +162,7 @@ Array [
         },
         "text": "+",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -198,6 +205,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Literal {
       "_location": Object {
         "end": Object {
@@ -209,6 +217,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 5,
@@ -255,6 +264,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Literal {
       "_location": Object {
         "end": Object {
@@ -266,6 +276,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": BrsString {
         "kind": 3,
         "value": "hello",
diff --git a/test/parser/expression/__snapshots__/Relational.test.js.snap b/test/parser/expression/__snapshots__/Relational.test.js.snap
index 12864d3..c1c2775 100644
--- a/test/parser/expression/__snapshots__/Relational.test.js.snap
+++ b/test/parser/expression/__snapshots__/Relational.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -49,6 +50,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -65,6 +67,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -86,6 +89,7 @@ Array [
         },
         "text": "=",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -128,6 +132,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -140,6 +145,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -156,6 +162,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -177,6 +184,7 @@ Array [
         },
         "text": ">",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -219,6 +227,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -231,6 +240,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -247,6 +257,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -268,6 +279,7 @@ Array [
         },
         "text": ">=",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -310,6 +322,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -322,6 +335,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -338,6 +352,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -359,6 +374,7 @@ Array [
         },
         "text": "<>",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -401,6 +417,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -413,6 +430,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -429,6 +447,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -450,6 +469,7 @@ Array [
         },
         "text": "<",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -492,6 +512,7 @@ Array [
         "text": "=",
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -504,6 +525,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -520,6 +542,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 2,
@@ -541,6 +564,7 @@ Array [
         },
         "text": "<=",
       },
+      "type": "Binary",
     },
   },
 ]
diff --git a/test/parser/statement/__snapshots__/AssignmentOperators.test.js.snap b/test/parser/statement/__snapshots__/AssignmentOperators.test.js.snap
index 0b253ee..6911fdc 100644
--- a/test/parser/statement/__snapshots__/AssignmentOperators.test.js.snap
+++ b/test/parser/statement/__snapshots__/AssignmentOperators.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Variable {
         "name": Object {
@@ -55,6 +56,7 @@ Array [
           },
           "text": "_",
         },
+        "type": "Variable",
       },
       "right": Literal {
         "_location": Object {
@@ -67,6 +69,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 3,
@@ -88,6 +91,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
@@ -130,6 +134,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Variable {
         "name": Object {
@@ -148,6 +153,7 @@ Array [
           },
           "text": "_",
         },
+        "type": "Variable",
       },
       "right": Literal {
         "_location": Object {
@@ -160,6 +166,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "lorem",
@@ -181,6 +188,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
@@ -223,6 +231,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Variable {
         "name": Object {
@@ -241,6 +250,7 @@ Array [
           },
           "text": "_",
         },
+        "type": "Variable",
       },
       "right": Literal {
         "_location": Object {
@@ -253,6 +263,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 4,
@@ -274,6 +285,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
@@ -316,6 +328,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Variable {
         "name": Object {
@@ -334,6 +347,7 @@ Array [
           },
           "text": "_",
         },
+        "type": "Variable",
       },
       "right": Literal {
         "_location": Object {
@@ -346,6 +360,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 6,
@@ -367,6 +382,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
@@ -409,6 +425,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Variable {
         "name": Object {
@@ -427,6 +444,7 @@ Array [
           },
           "text": "_",
         },
+        "type": "Variable",
       },
       "right": Literal {
         "_location": Object {
@@ -439,6 +457,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 7,
@@ -460,6 +479,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
@@ -502,6 +522,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Variable {
         "name": Object {
@@ -520,6 +541,7 @@ Array [
           },
           "text": "_",
         },
+        "type": "Variable",
       },
       "right": Literal {
         "_location": Object {
@@ -532,6 +554,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -553,6 +576,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
@@ -595,6 +619,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Variable {
         "name": Object {
@@ -613,6 +638,7 @@ Array [
           },
           "text": "_",
         },
+        "type": "Variable",
       },
       "right": Literal {
         "_location": Object {
@@ -625,6 +651,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 1,
@@ -646,6 +673,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
diff --git a/test/parser/statement/__snapshots__/Block.test.js.snap b/test/parser/statement/__snapshots__/Block.test.js.snap
index 1e7a8a8..dfd1619 100644
--- a/test/parser/statement/__snapshots__/Block.test.js.snap
+++ b/test/parser/statement/__snapshots__/Block.test.js.snap
@@ -51,6 +51,7 @@ Array [
                         },
                         "text": "i",
                       },
+                      "type": "Variable",
                     },
                   ],
                   "tokens": Object {
@@ -72,8 +73,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "counterDeclaration": Assignment {
               "name": Object {
@@ -112,6 +115,7 @@ Array [
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -124,6 +128,7 @@ Array [
                     "line": 3,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 0,
@@ -142,6 +147,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 10,
@@ -159,6 +165,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 1,
@@ -234,8 +241,10 @@ Array [
                 "text": "To",
               },
             },
+            "type": "For",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -273,6 +282,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -291,6 +301,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -349,6 +360,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -361,6 +373,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 1,
@@ -368,6 +381,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -405,6 +419,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -423,6 +438,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -457,6 +473,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -489,6 +506,7 @@ Array [
                           "line": 8,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsString {
                         "kind": 3,
                         "value": "true",
@@ -514,8 +532,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "elseIfs": Array [
               Object {
@@ -531,6 +551,7 @@ Array [
                       "line": 5,
                     },
                   },
+                  "type": "Literal",
                   "value": BrsBoolean {
                     "kind": 2,
                     "value": true,
@@ -563,6 +584,7 @@ Array [
                               "line": 6,
                             },
                           },
+                          "type": "Literal",
                           "value": BrsString {
                             "kind": 3,
                             "value": "true",
@@ -588,9 +610,12 @@ Array [
                           "text": "print",
                         },
                       },
+                      "type": "Print",
                     },
                   ],
+                  "type": "Block",
                 },
+                "type": "ElseIf",
               },
             ],
             "thenBranch": Block {
@@ -620,6 +645,7 @@ Array [
                           "line": 4,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsString {
                         "kind": 3,
                         "value": "true",
@@ -645,8 +671,10 @@ Array [
                       "text": "print",
                     },
                   },
+                  "type": "Print",
                 },
               ],
+              "type": "Block",
             },
             "tokens": Object {
               "elseIfs": Array [
@@ -720,8 +748,10 @@ Array [
                 "text": "then",
               },
             },
+            "type": "If",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -759,6 +789,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -777,6 +808,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
diff --git a/test/parser/statement/__snapshots__/Declaration.test.js.snap b/test/parser/statement/__snapshots__/Declaration.test.js.snap
index 038ec1a..8181b1b 100644
--- a/test/parser/statement/__snapshots__/Declaration.test.js.snap
+++ b/test/parser/statement/__snapshots__/Declaration.test.js.snap
@@ -37,6 +37,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -49,6 +50,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -65,6 +67,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 3,
@@ -86,6 +89,7 @@ Array [
         },
         "text": undefined,
       },
+      "type": "Binary",
     },
   },
 ]
@@ -128,6 +132,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Literal {
       "_location": Object {
         "end": Object {
@@ -139,6 +144,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 5,
@@ -185,6 +191,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Assignment",
     "value": Variable {
       "name": Object {
         "isReserved": false,
@@ -202,6 +209,7 @@ Array [
         },
         "text": "foo",
       },
+      "type": "Variable",
     },
   },
 ]
diff --git a/test/parser/statement/__snapshots__/Function.test.js.snap b/test/parser/statement/__snapshots__/Function.test.js.snap
index c3a2c49..e94ec70 100644
--- a/test/parser/statement/__snapshots__/Function.test.js.snap
+++ b/test/parser/statement/__snapshots__/Function.test.js.snap
@@ -44,6 +44,7 @@ Object {
                   "text": "return",
                 },
               },
+              "type": "Return",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -56,6 +57,7 @@ Object {
                     "line": 3,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 1,
@@ -63,6 +65,7 @@ Object {
               },
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -100,6 +103,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 10,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -118,6 +122,7 @@ Object {
         },
         "text": "StringFunc#",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -154,6 +159,7 @@ Object {
                   "text": "return",
                 },
               },
+              "type": "Return",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -166,6 +172,7 @@ Object {
                     "line": 7,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 1,
@@ -173,6 +180,7 @@ Object {
               },
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -210,6 +218,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 10,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -228,6 +237,7 @@ Object {
         },
         "text": "IntegerFunc%",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -264,6 +274,7 @@ Object {
                   "text": "return",
                 },
               },
+              "type": "Return",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -276,6 +287,7 @@ Object {
                     "line": 11,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 1,
@@ -283,6 +295,7 @@ Object {
               },
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -320,6 +333,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 10,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -338,6 +352,7 @@ Object {
         },
         "text": "FloatFunc!",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -374,6 +389,7 @@ Object {
                   "text": "return",
                 },
               },
+              "type": "Return",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -386,6 +402,7 @@ Object {
                     "line": 15,
                   },
                 },
+                "type": "Literal",
                 "value": Int32 {
                   "kind": 4,
                   "value": 1,
@@ -393,6 +410,7 @@ Object {
               },
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -430,6 +448,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 10,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -448,6 +467,7 @@ Object {
         },
         "text": "DoubleFunc#",
       },
+      "type": "Function",
     },
   ],
 }
@@ -470,6 +490,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -516,6 +537,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -575,6 +597,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 4,
@@ -641,6 +664,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -653,6 +677,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -674,6 +699,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -719,6 +745,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -736,6 +763,7 @@ Array [
       },
       "text": "add",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -757,6 +785,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -881,6 +910,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -898,6 +928,7 @@ Array [
       },
       "text": "add2",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -919,6 +950,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1041,6 +1073,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -1058,6 +1091,7 @@ Array [
       },
       "text": "repeat",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -1079,6 +1113,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1125,6 +1160,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -1190,6 +1226,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -1202,6 +1239,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -1223,6 +1261,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -1267,6 +1306,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -1284,6 +1324,7 @@ Array [
       },
       "text": "add",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -1305,6 +1346,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1340,6 +1382,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -1357,6 +1400,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -1391,6 +1435,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "Lorem ipsum",
@@ -1415,8 +1460,10 @@ Array [
                 "text": "print",
               },
             },
+            "type": "Print",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1452,6 +1499,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -1469,6 +1517,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -1490,6 +1539,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -1525,6 +1575,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -1542,6 +1593,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -1581,6 +1633,7 @@ Object {
                       "line": 3,
                     },
                   },
+                  "type": "Literal",
                   "value": BrsString {
                     "kind": 3,
                     "value": "Hello world",
@@ -1606,8 +1659,10 @@ Object {
                   "text": "print",
                 },
               },
+              "type": "Print",
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -1645,6 +1700,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 10,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -1663,6 +1719,7 @@ Object {
         },
         "text": "Main",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -1679,6 +1736,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -1716,6 +1774,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -1734,6 +1793,7 @@ Object {
         },
         "text": "DoSomething",
       },
+      "type": "Function",
     },
   ],
 }
@@ -1763,6 +1823,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -1800,6 +1861,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -1818,6 +1880,7 @@ Object {
         },
         "text": "StringSub#",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -1834,6 +1897,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -1871,6 +1935,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -1889,6 +1954,7 @@ Object {
         },
         "text": "IntegerSub%",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -1905,6 +1971,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -1942,6 +2009,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -1960,6 +2028,7 @@ Object {
         },
         "text": "FloatSub!",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -1976,6 +2045,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -2013,6 +2083,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -2031,6 +2102,7 @@ Object {
         },
         "text": "DoubleSub#",
       },
+      "type": "Function",
     },
   ],
 }
@@ -2053,6 +2125,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2088,6 +2161,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -2105,6 +2179,7 @@ Array [
       },
       "text": "bar",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -2139,6 +2214,7 @@ Array [
                     "line": -9,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "Lorem ipsum",
@@ -2163,8 +2239,10 @@ Array [
                 "text": "print",
               },
             },
+            "type": "Print",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2200,6 +2278,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -2217,6 +2296,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -2238,6 +2318,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2284,6 +2365,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -2343,6 +2425,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 4,
@@ -2409,6 +2492,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -2421,6 +2505,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -2442,6 +2527,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -2487,6 +2573,7 @@ Array [
         },
       ],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -2504,6 +2591,7 @@ Array [
       },
       "text": "add",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -2525,6 +2613,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2649,6 +2738,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -2666,6 +2756,7 @@ Array [
       },
       "text": "add2",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -2687,6 +2778,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2809,6 +2901,7 @@ Array [
         },
       ],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -2826,6 +2919,7 @@ Array [
       },
       "text": "repeat",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -2847,6 +2941,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -2893,6 +2988,7 @@ Array [
                 "line": -9,
               },
             },
+            "type": "Literal",
             "value": Int32 {
               "kind": 4,
               "value": 3,
@@ -2958,6 +3054,7 @@ Array [
                 },
                 "text": "a",
               },
+              "type": "Variable",
             },
             "right": Literal {
               "_location": Object {
@@ -2970,6 +3067,7 @@ Array [
                   "line": -9,
                 },
               },
+              "type": "Literal",
               "value": Int32 {
                 "kind": 4,
                 "value": 5,
@@ -2991,6 +3089,7 @@ Array [
               },
               "text": "+",
             },
+            "type": "Binary",
           },
           "location": Object {
             "end": Object {
@@ -3035,6 +3134,7 @@ Array [
         },
       ],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -3052,6 +3152,7 @@ Array [
       },
       "text": "add",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -3091,6 +3192,7 @@ Object {
                       "line": 3,
                     },
                   },
+                  "type": "Literal",
                   "value": BrsString {
                     "kind": 3,
                     "value": "Hello world",
@@ -3116,8 +3218,10 @@ Object {
                   "text": "print",
                 },
               },
+              "type": "Print",
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -3155,6 +3259,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -3173,6 +3278,7 @@ Object {
         },
         "text": "Main",
       },
+      "type": "Function",
     },
     Function {
       "func": Function {
@@ -3189,6 +3295,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -3226,6 +3333,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -3244,6 +3352,7 @@ Object {
         },
         "text": "DoSomething",
       },
+      "type": "Function",
     },
   ],
 }
diff --git a/test/parser/statement/__snapshots__/Goto.test.js.snap b/test/parser/statement/__snapshots__/Goto.test.js.snap
index a0d920f..14f44f1 100644
--- a/test/parser/statement/__snapshots__/Goto.test.js.snap
+++ b/test/parser/statement/__snapshots__/Goto.test.js.snap
@@ -54,6 +54,7 @@ Array [
                 "text": "myLabel",
               },
             },
+            "type": "Goto",
           },
           Goto {
             "tokens": Object {
@@ -92,6 +93,7 @@ Array [
                 "text": "myLabel",
               },
             },
+            "type": "Goto",
           },
           Label {
             "tokens": Object {
@@ -130,8 +132,10 @@ Array [
                 "text": "myLabel",
               },
             },
+            "type": "Label",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -169,6 +173,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -187,6 +192,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -228,6 +234,7 @@ Array [
         "text": "SomeLabel",
       },
     },
+    "type": "Label",
   },
 ]
 `;
@@ -271,6 +278,7 @@ Object {
           "text": "SomeLabel",
         },
       },
+      "type": "Goto",
     },
   ],
 }
diff --git a/test/parser/statement/__snapshots__/Increment.test.js.snap b/test/parser/statement/__snapshots__/Increment.test.js.snap
index 35afe32..6d99f48 100644
--- a/test/parser/statement/__snapshots__/Increment.test.js.snap
+++ b/test/parser/statement/__snapshots__/Increment.test.js.snap
@@ -34,6 +34,7 @@ Array [
               },
               "text": "++",
             },
+            "type": "Increment",
             "value": Variable {
               "name": Object {
                 "isReserved": false,
@@ -51,9 +52,11 @@ Array [
                 },
                 "text": "someValue",
               },
+              "type": "Variable",
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -89,6 +92,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -106,6 +110,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -129,6 +134,7 @@ Array [
       },
       "text": "++",
     },
+    "type": "Increment",
     "value": IndexedGet {
       "closingSquare": Object {
         "isReserved": false,
@@ -163,6 +169,7 @@ Array [
           },
           "text": "property",
         },
+        "type": "Variable",
       },
       "obj": Variable {
         "name": Object {
@@ -181,7 +188,9 @@ Array [
           },
           "text": "obj",
         },
+        "type": "Variable",
       },
+      "type": "IndexedGet",
     },
   },
 ]
@@ -206,6 +215,7 @@ Array [
       },
       "text": "++",
     },
+    "type": "Increment",
     "value": Variable {
       "name": Object {
         "isReserved": false,
@@ -223,6 +233,7 @@ Array [
         },
         "text": "foo",
       },
+      "type": "Variable",
     },
   },
 ]
@@ -247,6 +258,7 @@ Array [
       },
       "text": "--",
     },
+    "type": "Increment",
     "value": DottedGet {
       "name": Object {
         "isReserved": false,
@@ -281,7 +293,9 @@ Array [
           },
           "text": "obj",
         },
+        "type": "Variable",
       },
+      "type": "DottedGet",
     },
   },
 ]
diff --git a/test/parser/statement/__snapshots__/LibraryStatement.test.js.snap b/test/parser/statement/__snapshots__/LibraryStatement.test.js.snap
index 42c2ace..4002cea 100644
--- a/test/parser/statement/__snapshots__/LibraryStatement.test.js.snap
+++ b/test/parser/statement/__snapshots__/LibraryStatement.test.js.snap
@@ -21,6 +21,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -58,6 +59,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -76,6 +78,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
     Library {
       "tokens": Object {
@@ -117,6 +120,7 @@ Object {
           "text": "Library",
         },
       },
+      "type": "Library",
     },
   ],
 }
@@ -183,8 +187,10 @@ Object {
                   "text": "Library",
                 },
               },
+              "type": "Library",
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -222,6 +228,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -240,6 +247,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
   ],
 }
@@ -301,6 +309,7 @@ Object {
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": AALiteral {
                 "close": Object {
                   "isReserved": false,
@@ -337,6 +346,7 @@ Object {
                           "line": 4,
                         },
                       },
+                      "type": "Literal",
                       "value": BrsString {
                         "kind": 3,
                         "value": "Gotham City Library",
@@ -361,9 +371,11 @@ Object {
                   },
                   "text": "{",
                 },
+                "type": "AALiteral",
               },
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -401,6 +413,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -419,6 +432,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
   ],
 }
@@ -480,6 +494,7 @@ Object {
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -492,6 +507,7 @@ Object {
                     "line": 3,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "Gotham City Library",
@@ -499,6 +515,7 @@ Object {
               },
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -536,6 +553,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -554,6 +572,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
   ],
 }
@@ -586,6 +605,7 @@ Object {
           "text": "library",
         },
       },
+      "type": "Library",
     },
     Function {
       "func": Function {
@@ -639,6 +659,7 @@ Object {
                   "text": "=",
                 },
               },
+              "type": "Assignment",
               "value": Literal {
                 "_location": Object {
                   "end": Object {
@@ -651,6 +672,7 @@ Object {
                     "line": 4,
                   },
                 },
+                "type": "Literal",
                 "value": BrsString {
                   "kind": 3,
                   "value": "Your Library",
@@ -658,6 +680,7 @@ Object {
               },
             },
           ],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -695,6 +718,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -713,6 +737,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
   ],
 }
@@ -747,6 +772,7 @@ Object {
           "text": "library",
         },
       },
+      "type": "Library",
     },
     Function {
       "func": Function {
@@ -763,6 +789,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -800,6 +827,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -818,6 +846,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
   ],
 }
@@ -867,6 +896,7 @@ Object {
           "text": "Library",
         },
       },
+      "type": "Library",
     },
     Function {
       "func": Function {
@@ -883,6 +913,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -920,6 +951,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -938,6 +970,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
   ],
 }
@@ -987,6 +1020,7 @@ Object {
           "text": "Library",
         },
       },
+      "type": "Library",
     },
     Library {
       "tokens": Object {
@@ -1028,6 +1062,7 @@ Object {
           "text": "Library",
         },
       },
+      "type": "Library",
     },
     Function {
       "func": Function {
@@ -1044,6 +1079,7 @@ Object {
             },
           },
           "statements": Array [],
+          "type": "Block",
         },
         "end": Object {
           "isReserved": false,
@@ -1081,6 +1117,7 @@ Object {
         },
         "parameters": Array [],
         "returns": 11,
+        "type": "Function",
       },
       "name": Object {
         "isReserved": false,
@@ -1099,6 +1136,7 @@ Object {
         },
         "text": "main",
       },
+      "type": "Function",
     },
   ],
 }
diff --git a/test/parser/statement/__snapshots__/Misc.test.js.snap b/test/parser/statement/__snapshots__/Misc.test.js.snap
index a6c24b7..1d96b20 100644
--- a/test/parser/statement/__snapshots__/Misc.test.js.snap
+++ b/test/parser/statement/__snapshots__/Misc.test.js.snap
@@ -54,6 +54,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": AALiteral {
               "close": Object {
                 "isReserved": false,
@@ -90,6 +91,7 @@ Array [
                         "line": 4,
                       },
                     },
+                    "type": "Literal",
                     "value": BrsBoolean {
                       "kind": 2,
                       "value": true,
@@ -114,9 +116,11 @@ Array [
                 },
                 "text": "{",
               },
+              "type": "AALiteral",
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -154,6 +158,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -172,6 +177,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -213,8 +219,10 @@ Array [
                 "text": "end",
               },
             },
+            "type": "End",
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -252,6 +260,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -270,6 +279,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -328,6 +338,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -340,6 +351,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -347,6 +359,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -384,6 +397,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -402,6 +416,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -460,6 +475,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": AALiteral {
               "close": Object {
                 "isReserved": false,
@@ -496,6 +512,7 @@ Array [
                 },
                 "text": "{",
               },
+              "type": "AALiteral",
             },
           },
           DottedSet {
@@ -534,7 +551,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -547,6 +566,7 @@ Array [
                   "line": 4,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -589,7 +609,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -602,6 +624,7 @@ Array [
                   "line": 5,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -644,7 +667,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -657,6 +682,7 @@ Array [
                   "line": 6,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -699,7 +725,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -712,6 +740,7 @@ Array [
                   "line": 7,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -754,7 +783,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -767,6 +798,7 @@ Array [
                   "line": 8,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -809,7 +841,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -822,6 +856,7 @@ Array [
                   "line": 9,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -864,7 +899,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -877,6 +914,7 @@ Array [
                   "line": 10,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -919,7 +957,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -932,6 +972,7 @@ Array [
                   "line": 11,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -974,7 +1015,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -987,6 +1030,7 @@ Array [
                   "line": 12,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1029,7 +1073,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1042,6 +1088,7 @@ Array [
                   "line": 13,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1084,7 +1131,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1097,6 +1146,7 @@ Array [
                   "line": 14,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1139,7 +1189,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1152,6 +1204,7 @@ Array [
                   "line": 15,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1194,7 +1247,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1207,6 +1262,7 @@ Array [
                   "line": 16,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1249,7 +1305,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1262,6 +1320,7 @@ Array [
                   "line": 17,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1304,7 +1363,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1317,6 +1378,7 @@ Array [
                   "line": 18,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1359,7 +1421,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1372,6 +1436,7 @@ Array [
                   "line": 19,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1414,7 +1479,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1427,6 +1494,7 @@ Array [
                   "line": 20,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1469,7 +1537,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1482,6 +1552,7 @@ Array [
                   "line": 21,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1524,7 +1595,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1537,6 +1610,7 @@ Array [
                   "line": 22,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1579,7 +1653,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1592,6 +1668,7 @@ Array [
                   "line": 23,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1634,7 +1711,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1647,6 +1726,7 @@ Array [
                   "line": 24,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1689,7 +1769,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1702,6 +1784,7 @@ Array [
                   "line": 25,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1744,7 +1827,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1757,6 +1842,7 @@ Array [
                   "line": 26,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1799,7 +1885,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1812,6 +1900,7 @@ Array [
                   "line": 27,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1854,7 +1943,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1867,6 +1958,7 @@ Array [
                   "line": 28,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1909,7 +2001,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1922,6 +2016,7 @@ Array [
                   "line": 29,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -1964,7 +2059,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -1977,6 +2074,7 @@ Array [
                   "line": 30,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2019,7 +2117,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2032,6 +2132,7 @@ Array [
                   "line": 31,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2074,7 +2175,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2087,6 +2190,7 @@ Array [
                   "line": 32,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2129,7 +2233,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2142,6 +2248,7 @@ Array [
                   "line": 33,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2184,7 +2291,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2197,6 +2306,7 @@ Array [
                   "line": 34,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2239,7 +2349,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2252,6 +2364,7 @@ Array [
                   "line": 35,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2294,7 +2407,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2307,6 +2422,7 @@ Array [
                   "line": 36,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2349,7 +2465,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2362,6 +2480,7 @@ Array [
                   "line": 37,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2404,7 +2523,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2417,6 +2538,7 @@ Array [
                   "line": 38,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2459,7 +2581,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2472,6 +2596,7 @@ Array [
                   "line": 39,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2514,7 +2639,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2527,6 +2654,7 @@ Array [
                   "line": 40,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2569,7 +2697,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2582,6 +2712,7 @@ Array [
                   "line": 41,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2624,7 +2755,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2637,6 +2770,7 @@ Array [
                   "line": 42,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2679,7 +2813,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2692,6 +2828,7 @@ Array [
                   "line": 43,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2734,7 +2871,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2747,6 +2886,7 @@ Array [
                   "line": 44,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2789,7 +2929,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2802,6 +2944,7 @@ Array [
                   "line": 45,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2844,7 +2987,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2857,6 +3002,7 @@ Array [
                   "line": 46,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2899,7 +3045,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2912,6 +3060,7 @@ Array [
                   "line": 47,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -2954,7 +3103,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -2967,6 +3118,7 @@ Array [
                   "line": 48,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3009,7 +3161,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3022,6 +3176,7 @@ Array [
                   "line": 49,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3064,7 +3219,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3077,6 +3234,7 @@ Array [
                   "line": 50,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3119,7 +3277,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3132,6 +3292,7 @@ Array [
                   "line": 51,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3174,7 +3335,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3187,6 +3350,7 @@ Array [
                   "line": 52,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3229,7 +3393,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3242,6 +3408,7 @@ Array [
                   "line": 53,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3284,7 +3451,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3297,6 +3466,7 @@ Array [
                   "line": 54,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3339,7 +3509,9 @@ Array [
                 },
                 "text": "person",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3352,6 +3524,7 @@ Array [
                   "line": 55,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3359,6 +3532,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -3396,6 +3570,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -3414,6 +3589,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -3472,6 +3648,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3484,6 +3661,7 @@ Array [
                   "line": 3,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3527,6 +3705,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3539,6 +3718,7 @@ Array [
                   "line": 4,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3582,6 +3762,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3594,6 +3775,7 @@ Array [
                   "line": 5,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3637,6 +3819,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3649,6 +3832,7 @@ Array [
                   "line": 6,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3692,6 +3876,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3704,6 +3889,7 @@ Array [
                   "line": 7,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3747,6 +3933,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3759,6 +3946,7 @@ Array [
                   "line": 8,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3802,6 +3990,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3814,6 +4003,7 @@ Array [
                   "line": 9,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3857,6 +4047,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -3869,6 +4060,7 @@ Array [
                   "line": 10,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -3876,6 +4068,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -3913,6 +4106,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -3931,6 +4125,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
diff --git a/test/parser/statement/__snapshots__/PrintStatement.test.js.snap b/test/parser/statement/__snapshots__/PrintStatement.test.js.snap
index cd3b6a9..c9d60f6 100644
--- a/test/parser/statement/__snapshots__/PrintStatement.test.js.snap
+++ b/test/parser/statement/__snapshots__/PrintStatement.test.js.snap
@@ -15,6 +15,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "Foo",
@@ -31,6 +32,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "bar",
@@ -47,6 +49,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "baz",
@@ -71,6 +74,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Print",
   },
 ]
 `;
@@ -90,6 +94,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "Foo",
@@ -122,6 +127,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "bar",
@@ -154,6 +160,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "baz",
@@ -178,6 +185,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Print",
   },
 ]
 `;
@@ -197,6 +205,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": undefined,
       },
     ],
@@ -218,6 +227,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Print",
   },
 ]
 `;
@@ -237,6 +247,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsString {
           "kind": 3,
           "value": "",
@@ -261,6 +272,7 @@ Array [
         "text": undefined,
       },
     },
+    "type": "Print",
   },
 ]
 `;
diff --git a/test/parser/statement/__snapshots__/ReturnStatement.test.js.snap b/test/parser/statement/__snapshots__/ReturnStatement.test.js.snap
index 5f6e4ab..473745c 100644
--- a/test/parser/statement/__snapshots__/ReturnStatement.test.js.snap
+++ b/test/parser/statement/__snapshots__/ReturnStatement.test.js.snap
@@ -36,6 +36,7 @@ Array [
                 "text": "return",
               },
             },
+            "type": "Return",
             "value": Call {
               "args": Array [],
               "callee": Variable {
@@ -55,6 +56,7 @@ Array [
                   },
                   "text": "RebootSystem",
                 },
+                "type": "Variable",
               },
               "closingParen": Object {
                 "isReserved": false,
@@ -72,9 +74,11 @@ Array [
                 },
                 "text": ")",
               },
+              "type": "Call",
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -110,6 +114,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -127,6 +132,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -167,8 +173,10 @@ Array [
                 "text": "return",
               },
             },
+            "type": "Return",
             "value": Literal {
               "_location": undefined,
+              "type": "Literal",
               "value": BrsString {
                 "kind": 3,
                 "value": "test",
@@ -176,6 +184,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -211,6 +220,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -228,6 +238,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -268,9 +279,11 @@ Array [
                 "text": "return",
               },
             },
+            "type": "Return",
             "value": undefined,
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -306,6 +319,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -323,6 +337,7 @@ Array [
       },
       "text": "foo",
     },
+    "type": "Function",
   },
 ]
 `;
diff --git a/test/parser/statement/__snapshots__/Set.test.js.snap b/test/parser/statement/__snapshots__/Set.test.js.snap
index 1e71c2b..c4bc721 100644
--- a/test/parser/statement/__snapshots__/Set.test.js.snap
+++ b/test/parser/statement/__snapshots__/Set.test.js.snap
@@ -30,6 +30,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 0,
@@ -52,7 +53,9 @@ Array [
         },
         "text": "someArray",
       },
+      "type": "Variable",
     },
+    "type": "IndexedSet",
     "value": Binary {
       "left": IndexedGet {
         "closingSquare": Object {
@@ -82,6 +85,7 @@ Array [
               "line": -9,
             },
           },
+          "type": "Literal",
           "value": Int32 {
             "kind": 4,
             "value": 0,
@@ -104,7 +108,9 @@ Array [
             },
             "text": "someArray",
           },
+          "type": "Variable",
         },
+        "type": "IndexedGet",
       },
       "right": Literal {
         "_location": Object {
@@ -117,6 +123,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 3,
@@ -138,6 +145,7 @@ Array [
         },
         "text": "*=",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -173,6 +181,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 0,
@@ -195,7 +204,9 @@ Array [
         },
         "text": "someArray",
       },
+      "type": "Variable",
     },
+    "type": "IndexedSet",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -210,6 +221,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -245,6 +257,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -280,6 +293,7 @@ Array [
           "line": -9,
         },
       },
+      "type": "Literal",
       "value": Int32 {
         "kind": 4,
         "value": 0,
@@ -302,7 +316,9 @@ Array [
         },
         "text": "someArray",
       },
+      "type": "Variable",
     },
+    "type": "IndexedSet",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -315,6 +331,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": true,
@@ -331,6 +348,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": false,
@@ -352,6 +370,7 @@ Array [
         },
         "text": "and",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -393,7 +412,9 @@ Array [
         },
         "text": "foo",
       },
+      "type": "Variable",
     },
+    "type": "DottedSet",
     "value": Binary {
       "left": DottedGet {
         "name": Object {
@@ -429,7 +450,9 @@ Array [
             },
             "text": "foo",
           },
+          "type": "Variable",
         },
+        "type": "DottedGet",
       },
       "right": Literal {
         "_location": Object {
@@ -442,6 +465,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": Int32 {
           "kind": 4,
           "value": 5,
@@ -463,6 +487,7 @@ Array [
         },
         "text": "*=",
       },
+      "type": "Binary",
     },
   },
 ]
@@ -504,7 +529,9 @@ Array [
         },
         "text": "foo",
       },
+      "type": "Variable",
     },
+    "type": "DottedSet",
     "value": Function {
       "body": Block {
         "location": Object {
@@ -519,6 +546,7 @@ Array [
           },
         },
         "statements": Array [],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -554,6 +582,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 10,
+      "type": "Function",
     },
   },
 ]
@@ -595,7 +624,9 @@ Array [
         },
         "text": "foo",
       },
+      "type": "Variable",
     },
+    "type": "DottedSet",
     "value": Binary {
       "left": Literal {
         "_location": Object {
@@ -608,6 +639,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": true,
@@ -624,6 +656,7 @@ Array [
             "line": -9,
           },
         },
+        "type": "Literal",
         "value": BrsBoolean {
           "kind": 2,
           "value": false,
@@ -645,6 +678,7 @@ Array [
         },
         "text": "and",
       },
+      "type": "Binary",
     },
   },
 ]
diff --git a/test/parser/statement/__snapshots__/Stop.test.js.snap b/test/parser/statement/__snapshots__/Stop.test.js.snap
index a44f942..6b52572 100644
--- a/test/parser/statement/__snapshots__/Stop.test.js.snap
+++ b/test/parser/statement/__snapshots__/Stop.test.js.snap
@@ -54,6 +54,7 @@ Array [
                 "text": "=",
               },
             },
+            "type": "Assignment",
             "value": AALiteral {
               "close": Object {
                 "isReserved": false,
@@ -90,6 +91,7 @@ Array [
                         "line": 4,
                       },
                     },
+                    "type": "Literal",
                     "value": BrsBoolean {
                       "kind": 2,
                       "value": false,
@@ -114,6 +116,7 @@ Array [
                 },
                 "text": "{",
               },
+              "type": "AALiteral",
             },
           },
           DottedSet {
@@ -152,7 +155,9 @@ Array [
                 },
                 "text": "theObject",
               },
+              "type": "Variable",
             },
+            "type": "DottedSet",
             "value": Literal {
               "_location": Object {
                 "end": Object {
@@ -165,6 +170,7 @@ Array [
                   "line": 6,
                 },
               },
+              "type": "Literal",
               "value": BrsBoolean {
                 "kind": 2,
                 "value": true,
@@ -172,6 +178,7 @@ Array [
             },
           },
         ],
+        "type": "Block",
       },
       "end": Object {
         "isReserved": false,
@@ -209,6 +216,7 @@ Array [
       },
       "parameters": Array [],
       "returns": 11,
+      "type": "Function",
     },
     "name": Object {
       "isReserved": false,
@@ -227,6 +235,7 @@ Array [
       },
       "text": "Main",
     },
+    "type": "Function",
   },
 ]
 `;
@@ -252,6 +261,7 @@ Array [
         "text": "stop",
       },
     },
+    "type": "Stop",
   },
 ]
 `;
@@ -277,6 +287,7 @@ Array [
         "text": "stop",
       },
     },
+    "type": "Stop",
   },
 ]
 `;