public PrinterNode Visit(UnaryOperationNode node) { var pNode = new PrinterNode(node.Operation.StringValue); pNode.AddChild(node.Expr.Accept(this)); return(pNode); }
public bool Visit(UnaryOperationNode node) { //todo: special treat with pointers ^, @ if (node.Type != null) { return(true); } node.Expr.Accept(this); // constraints to not if (node.Operation is ReservedToken reservedToken && reservedToken.Value == Constants.Words.Not) { if (!(node.Expr.Type is SymInt || node.Expr.Type is SymBool || node.Expr.Type is SymChar)) { throw BuildException <OperatorNotOverloaded>(node.Expr.Type, node.Operation); } node.Type = node.Expr.Type; return(true); } node.Type = node.Expr.Type; switch (node.Operation) { case OperatorToken op: switch (node.Expr.Type) { case SymInt _: case SymDouble _: return(true); } break; case ReservedToken word: switch (word.Value) { case Constants.Words.Not: switch (node.Type) { case SymInt _: return(true); } break; } break; } throw BuildException <OperatorNotOverloaded>(node.Expr.Type, node.Operation); }