Mercurial > repos > tabletprog
view modules/ast.tp @ 246:8c81afd6d2d3
Refactor some of the AST node object constructors into a separate AST module
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 06 Jan 2014 19:41:35 -0800 |
parents | |
children | b76f683d076e |
line wrap: on
line source
{ _binary <- 0 _string <- 1 _int <- 2 #{ binary <- { _binary } stringlit <- { _string } intlit <- { _int } binaryOp:withArgs <- :opname :_left _right { #{ nodeType <- { _binary } left <- _left op <- opname right <- _right leftAssociative? <- { op != "|" } stringIndent <- :indent { (left stringIndent: indent) . " " . op . (right stringIndent: indent) } string <- { stringIndent: "" } } } stringLit <- :_val { #{ nodeType <- { _string } val <- _val stringIndent <- :indent { "\"" . val . "\"" } string <- { stringIndent: "" } } } intLit:withBits:andBase:signed? <- :_val :_bits :_base :_signed? { #{ nodeType <- { _int } val <- _val base <- _base bits <- _bits signed? <- _signed? stringIndent <- :indent { suffix <- "" if: bits != 32 || (not: signed?) { suffix <- (if: signed? {"i"} else: {"u"}) . bits } if: base = 16 { "0x" . (hex: val) . suffix } else: { if: base = 2 { str <- "0b" i <- bits - 1 printzero <- false while: { i >= 0 } do: { str <- str . (if: (lshift: 1 by: i) and val > 0 { printzero <- true "1" } else: { if: printzero {"0"} else: {""} }) i <- i - 1 } str . suffix } else: { (string: val) . suffix } } } string <- { stringIndent: "" } } } } }