From 2168bbf7cd370d6d6968444d60d1c520fbcc07d7 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Sat, 19 Sep 2015 09:38:10 -0400 Subject: [PATCH] add in some node types --- ast/base.go | 13 +++++++++++++ ast/compoundstatement.go | 13 +++++++++++++ ast/expressionstatement.go | 13 +++++++++++++ ast/node.go | 1 - ast/simplestatement.go | 18 ++++++++++++++++++ ast/smallstatement.go | 16 ++++++++++++++++ ast/statement.go | 18 ++++++++++++++++++ 7 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 ast/base.go create mode 100644 ast/compoundstatement.go create mode 100644 ast/expressionstatement.go create mode 100644 ast/simplestatement.go create mode 100644 ast/smallstatement.go create mode 100644 ast/statement.go diff --git a/ast/base.go b/ast/base.go new file mode 100644 index 0000000..f129bed --- /dev/null +++ b/ast/base.go @@ -0,0 +1,13 @@ +package ast + +type BaseNode struct { + ID NodeID +} + +func (node *BaseNode) initBaseNode(id NodeID) { + node.ID = id +} + +func (node *BaseNode) Name() string { + return NodeNames[node.ID] +} diff --git a/ast/compoundstatement.go b/ast/compoundstatement.go new file mode 100644 index 0000000..ea3cc46 --- /dev/null +++ b/ast/compoundstatement.go @@ -0,0 +1,13 @@ +package ast + +type CompoundStatement struct { + Statement +} + +func NewCompoundStatement() *CompoundStatement { + node := &CompoundStatement{} + node.initBaseNode(SIMPLE_STMT) + return node +} + +func (node *CompoundStatement) StatementNode() {} diff --git a/ast/expressionstatement.go b/ast/expressionstatement.go new file mode 100644 index 0000000..b7b6ddf --- /dev/null +++ b/ast/expressionstatement.go @@ -0,0 +1,13 @@ +package ast + +type ExpressionStatement struct { + BaseNode +} + +func NewExpressionStatement() *ExpressionStatement { + node := &ExpressionStatement{} + node.initBaseNode(EXPR_STMT) + return node +} + +func (node *ExpressionStatement) SmallStatementNode() {} diff --git a/ast/node.go b/ast/node.go index 3d50198..bbc0d0a 100644 --- a/ast/node.go +++ b/ast/node.go @@ -1,6 +1,5 @@ package ast type Node interface { - ID() NodeID Name() string } diff --git a/ast/simplestatement.go b/ast/simplestatement.go new file mode 100644 index 0000000..517d5d7 --- /dev/null +++ b/ast/simplestatement.go @@ -0,0 +1,18 @@ +package ast + +type SimpleStatement struct { + BaseNode + Statements []*SmallStatement +} + +func NewSimpleStatement() *SimpleStatement { + node := &SimpleStatement{} + node.initBaseNode(SIMPLE_STMT) + return node +} + +func (node *SimpleStatement) StatementNode() {} + +func (node *SimpleStatement) AppendSmallStatement(n *SmallStatement) { + node.Statements = append(node.Statements, n) +} diff --git a/ast/smallstatement.go b/ast/smallstatement.go new file mode 100644 index 0000000..afaf76a --- /dev/null +++ b/ast/smallstatement.go @@ -0,0 +1,16 @@ +package ast + +type SmallStatementNode interface { + SmallStatementNode() +} + +type SmallStatement struct { + BaseNode + Statement SmallStatementNode +} + +func NewSmallStatement() *SmallStatement { + node := &SmallStatement{} + node.initBaseNode(SMALL_STMT) + return node +} diff --git a/ast/statement.go b/ast/statement.go new file mode 100644 index 0000000..ace66b3 --- /dev/null +++ b/ast/statement.go @@ -0,0 +1,18 @@ +package ast + +type StatementNode interface { + StatementNode() +} + +type Statement struct { + BaseNode + Statement StatementNode +} + +func NewStatement() *Statement { + node := &Statement{} + node.initBaseNode(STMT) + return node +} + +func (node *Statement) StatementNode() {}