Mercurial > projects > dang
view ast/Exp.d @ 1:2168f4cb73f1
First push
author | johnsen@johnsen-desktop |
---|---|
date | Fri, 18 Apr 2008 02:01:38 +0200 |
parents | |
children | 2ce5209f1954 |
line wrap: on
line source
module ast.Exp; import tango.text.Util : jhash; import lexer.Token; import sema.SymbolTable; enum ExpType { Binary, Negate, IntegerLit, Identifier, AssignExp, CallExp, } class Exp { this(ExpType expType) { this.expType = expType; } ExpType expType; Scope env; } class CallExp : Exp { this(Exp exp, Exp[] args) { super(ExpType.CallExp); this.exp = exp; this.args = args; } Exp exp; Exp[] args; } class AssignExp : Exp { this(Identifier identifier, Exp exp) { super(ExpType.AssignExp); this.identifier = identifier; this.exp = exp; } Identifier identifier; Exp exp; } class BinaryExp : Exp { public enum Operator : char { Mul = '*', Div = '/', Add = '+', Sub = '-' } this(Operator op, Exp left, Exp right) { super(ExpType.Binary); this.op = op; this.left = left; this.right = right; } Operator op; Exp left, right; } class NegateExp : Exp { this(Exp exp) { super(ExpType.Negate); this.exp = exp; } public Exp exp; } class IntegerLit : Exp { this(Token t) { super(ExpType.IntegerLit); this.token = t; } Token token; } class Identifier : Exp { this(Token t) { super(ExpType.Identifier); this.token = t; name = t.get; } char[] get() { return name; } hash_t toHash() { return jhash(name); } int opCmp(Object o) { if (auto id = cast(Identifier)o) return typeid(char[]).compare(&name, &id.name); return 0; } int opEquals(Object o) { if (auto id = cast(Identifier)o) return typeid(char[]).equals(&name, &id.name); return 0; } Token token; char[] name; }