From 5ced4fc0f9bc2e0f590d76408c2d5c50804d7dfc Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Fri, 18 Sep 2015 21:19:46 -0400 Subject: [PATCH] add start to ast --- ast/fileinput.go | 19 ++++++++++ ast/listnode.go | 19 ++++++++++ ast/node.go | 6 ++++ ast/nodeid.go | 91 ++++++++++++++++++++++++++++++++++++++++++++++++ ast/nodename.go | 89 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 224 insertions(+) create mode 100644 ast/fileinput.go create mode 100644 ast/listnode.go create mode 100644 ast/node.go create mode 100644 ast/nodeid.go create mode 100644 ast/nodename.go diff --git a/ast/fileinput.go b/ast/fileinput.go new file mode 100644 index 0000000..093aa1d --- /dev/null +++ b/ast/fileinput.go @@ -0,0 +1,19 @@ +package ast + +type FileInput struct { + ListNode +} + +func NewFileInput() *FileInput { + node := &FileInput{} + node.initChildren() + return node +} + +func (node *FileInput) ID() NodeID { + return FILE_INPUT +} + +func (node *FileInput) Name() string { + return NodeNames[FILE_INPUT] +} diff --git a/ast/listnode.go b/ast/listnode.go new file mode 100644 index 0000000..f454026 --- /dev/null +++ b/ast/listnode.go @@ -0,0 +1,19 @@ +package ast + +import "github.com/brettlangdon/gython/token" + +type ListNode struct { + children []interface{} +} + +func (node *ListNode) initChildren() { + node.children = make([]interface{}, 0) +} + +func (node *ListNode) AppendToken(t *token.Token) { + node.children = append(node.children, t) +} + +func (node *ListNode) AppendNode(n Node) { + node.children = append(node.children, n) +} diff --git a/ast/node.go b/ast/node.go new file mode 100644 index 0000000..3d50198 --- /dev/null +++ b/ast/node.go @@ -0,0 +1,6 @@ +package ast + +type Node interface { + ID() NodeID + Name() string +} diff --git a/ast/nodeid.go b/ast/nodeid.go new file mode 100644 index 0000000..1c208c5 --- /dev/null +++ b/ast/nodeid.go @@ -0,0 +1,91 @@ +package ast + +type NodeID int + +const ( + SINGLE_INPUT NodeID = 256 + FILE_INPUT NodeID = 257 + EVAL_INPUT NodeID = 258 + DECORATOR NodeID = 259 + DECORATORS NodeID = 260 + DECORATED NodeID = 261 + ASYNC_FUNCDEF NodeID = 262 + FUNCDEF NodeID = 263 + PARAMETERS NodeID = 264 + TYPEDARGSLIST NodeID = 265 + TFPDEF NodeID = 266 + VARARGSLIST NodeID = 267 + VFPDEF NodeID = 268 + STMT NodeID = 269 + SIMPLE_STMT NodeID = 270 + SMALL_STMT NodeID = 271 + EXPR_STMT NodeID = 272 + TESTLIST_STAR_EXPR NodeID = 273 + AUGASSIGN NodeID = 274 + DEL_STMT NodeID = 275 + PASS_STMT NodeID = 276 + FLOW_STMT NodeID = 277 + BREAK_STMT NodeID = 278 + CONTINUE_STMT NodeID = 279 + RETURN_STMT NodeID = 280 + YIELD_STMT NodeID = 281 + RAISE_STMT NodeID = 282 + IMPORT_STMT NodeID = 283 + IMPORT_NAME NodeID = 284 + IMPORT_FROM NodeID = 285 + IMPORT_AS_NAME NodeID = 286 + DOTTED_AS_NAME NodeID = 287 + IMPORT_AS_NAMES NodeID = 288 + DOTTED_AS_NAMES NodeID = 289 + DOTTED_NAME NodeID = 290 + GLOBAL_STMT NodeID = 291 + NONLOCAL_STMT NodeID = 292 + ASSERT_STMT NodeID = 293 + COMPOUND_STMT NodeID = 294 + ASYNC_STMT NodeID = 295 + IF_STMT NodeID = 296 + WHILE_STMT NodeID = 297 + FOR_STMT NodeID = 298 + TRY_STMT NodeID = 299 + WITH_STMT NodeID = 300 + WITH_ITEM NodeID = 301 + EXCEPT_CLAUSE NodeID = 302 + SUITE NodeID = 303 + TEST NodeID = 304 + TEST_NOCOND NodeID = 305 + LAMBDEF NodeID = 306 + LAMBDEF_NOCOND NodeID = 307 + OR_TEST NodeID = 308 + AND_TEST NodeID = 309 + NOT_TEST NodeID = 310 + COMPARISON NodeID = 311 + COMP_OP NodeID = 312 + STAR_EXPR NodeID = 313 + EXPR NodeID = 314 + XOR_EXPR NodeID = 315 + AND_EXPR NodeID = 316 + SHIFT_EXPR NodeID = 317 + ARITH_EXPR NodeID = 318 + TERM NodeID = 319 + FACTOR NodeID = 320 + POWER NodeID = 321 + ATOM_EXPR NodeID = 322 + ATOM NodeID = 323 + TESTLIST_COMP NodeID = 324 + TRAILER NodeID = 325 + SUBSCRIPTLIST NodeID = 326 + SUBSCRIPT NodeID = 327 + SLICEOP NodeID = 328 + EXPRLIST NodeID = 329 + TESTLIST NodeID = 330 + DICTORSETMAKER NodeID = 331 + CLASSDEF NodeID = 332 + ARGLIST NodeID = 333 + ARGUMENT NodeID = 334 + COMP_ITER NodeID = 335 + COMP_FOR NodeID = 336 + COMP_IF NodeID = 337 + ENCODING_DECL NodeID = 338 + YIELD_EXPR NodeID = 339 + YIELD_ARG NodeID = 340 +) diff --git a/ast/nodename.go b/ast/nodename.go new file mode 100644 index 0000000..b9e01aa --- /dev/null +++ b/ast/nodename.go @@ -0,0 +1,89 @@ +package ast + +var NodeNames = [...]string{ + SINGLE_INPUT: "SINGLE_INPUT", + FILE_INPUT: "FILE_INPUT", + EVAL_INPUT: "EVAL_INPUT", + DECORATOR: "DECORATOR", + DECORATORS: "DECORATORS", + DECORATED: "DECORATED", + ASYNC_FUNCDEF: "ASYNC_FUNCDEF", + FUNCDEF: "FUNCDEF", + PARAMETERS: "PARAMETERS", + TYPEDARGSLIST: "TYPEDARGSLIST", + TFPDEF: "TFPDEF", + VARARGSLIST: "VARARGSLIST", + VFPDEF: "VFPDEF", + STMT: "STMT", + SIMPLE_STMT: "SIMPLE_STMT", + SMALL_STMT: "SMALL_STMT", + EXPR_STMT: "EXPR_STMT", + TESTLIST_STAR_EXPR: "TESTLIST_STAR_EXPR", + AUGASSIGN: "AUGASSIGN", + DEL_STMT: "DEL_STMT", + PASS_STMT: "PASS_STMT", + FLOW_STMT: "FLOW_STMT", + BREAK_STMT: "BREAK_STMT", + CONTINUE_STMT: "CONTINUE_STMT", + RETURN_STMT: "RETURN_STMT", + YIELD_STMT: "YIELD_STMT", + RAISE_STMT: "RAISE_STMT", + IMPORT_STMT: "IMPORT_STMT", + IMPORT_NAME: "IMPORT_NAME", + IMPORT_FROM: "IMPORT_FROM", + IMPORT_AS_NAME: "IMPORT_AS_NAME", + DOTTED_AS_NAME: "DOTTED_AS_NAME", + IMPORT_AS_NAMES: "IMPORT_AS_NAMES", + DOTTED_AS_NAMES: "DOTTED_AS_NAMES", + DOTTED_NAME: "DOTTED_NAME", + GLOBAL_STMT: "GLOBAL_STMT", + NONLOCAL_STMT: "NONLOCAL_STMT", + ASSERT_STMT: "ASSERT_STMT", + COMPOUND_STMT: "COMPOUND_STMT", + ASYNC_STMT: "ASYNC_STMT", + IF_STMT: "IF_STMT", + WHILE_STMT: "WHILE_STMT", + FOR_STMT: "FOR_STMT", + TRY_STMT: "TRY_STMT", + WITH_STMT: "WITH_STMT", + WITH_ITEM: "WITH_ITEM", + EXCEPT_CLAUSE: "EXCEPT_CLAUSE", + SUITE: "SUITE", + TEST: "TEST", + TEST_NOCOND: "TEST_NOCOND", + LAMBDEF: "LAMBDEF", + LAMBDEF_NOCOND: "LAMBDEF_NOCOND", + OR_TEST: "OR_TEST", + AND_TEST: "AND_TEST", + NOT_TEST: "NOT_TEST", + COMPARISON: "COMPARISON", + COMP_OP: "COMP_OP", + STAR_EXPR: "STAR_EXPR", + EXPR: "EXPR", + XOR_EXPR: "XOR_EXPR", + AND_EXPR: "AND_EXPR", + SHIFT_EXPR: "SHIFT_EXPR", + ARITH_EXPR: "ARITH_EXPR", + TERM: "TERM", + FACTOR: "FACTOR", + POWER: "POWER", + ATOM_EXPR: "ATOM_EXPR", + ATOM: "ATOM", + TESTLIST_COMP: "TESTLIST_COMP", + TRAILER: "TRAILER", + SUBSCRIPTLIST: "SUBSCRIPTLIST", + SUBSCRIPT: "SUBSCRIPT", + SLICEOP: "SLICEOP", + EXPRLIST: "EXPRLIST", + TESTLIST: "TESTLIST", + DICTORSETMAKER: "DICTORSETMAKER", + CLASSDEF: "CLASSDEF", + ARGLIST: "ARGLIST", + ARGUMENT: "ARGUMENT", + COMP_ITER: "COMP_ITER", + COMP_FOR: "COMP_FOR", + COMP_IF: "COMP_IF", + ENCODING_DECL: "ENCODING_DECL", + YIELD_EXPR: "YIELD_EXPR", + YIELD_ARG: "YIELD_ARG", +}