public FunCall(Identitifer name, Token tok, Type type) : base(tok, type) { funcName = name ?? Identitifer.Match(); if (Parser.current.tag_value == '^') { Parser.Match('^'); isSystemFunction = true; } Parser.Match('['); returnType = Identitifer.Match(); if (Parser.current.tag_value == '|') { Parser.Match('|'); arguments.Add(Identitifer.Match()); while (Parser.current.tag_value == ',') { Parser.Match(','); arguments.Add(Identitifer.Match()); } } Parser.Match(']'); Parser.Match('('); if (Parser.current.tag_value == Tag.ID) { value.Add(BoolTree.Match()); while (Parser.current.tag_value == ',') { Parser.Match(','); value.Add(BoolTree.Match()); } } Parser.Match(')'); }
private Unary(Token tok, LogicNode expr) : base(tok, Type.Max(Type.Int, expr.type)) { if (type == null) { Error("TypeError"); } Expr = expr; }
public RightShift(Token tok, Type type) : base(tok, type) { Parser.Match('#'); Parser.Match('>'); Name = Identitifer.Match(); Parser.Match('>'); value = Parser.current.ToString(); Parser.Match(Tag.INT); }
private Type Check(Type lft, Type rht) { switch (Op.tag_value) { case Tag.OR: case Tag.AND: return((lft == Type.Bool && rht == Type.Bool) ? Type.Bool : null); default: return(lft == rht ? Type.Bool : null); } }
protected LogicNode(Token tok, Type type) { Op = tok; this.type = type; }
public Hex(Token tok, Type type) : base(tok, type) { Parser.Match('('); value = Identitifer.Match().ILValue; Parser.Match(')'); }
public variable(Identitifer name, Token tok, Type type) : base(tok, type) { Name = name; }
private Factor(Token tok, Type type) : base(tok, type) { }