/// <summary> /// Gets a node encoder for the given node. /// </summary> /// <param name="Node"></param> /// <returns></returns> public BinaryNodeEncoder GetEncoder(LNode Node) { if (Node.HasAttrs) { return(BinaryNodeEncoder.AttributeEncoder); } else if (Node.IsCall) { if (Node.Target.IsId && !Node.Target.HasAttrs) { return(BinaryNodeEncoder.CallIdEncoder); } else { return(BinaryNodeEncoder.CallEncoder); } } else if (Node.IsId) { return(BinaryNodeEncoder.IdEncoder); } else { object nodeVal = Node.Value; if (nodeVal == null) { return(BinaryNodeEncoder.NullEncoder); } else { BinaryNodeEncoder result; if (LiteralEncoders.TryGetValue(nodeVal.GetType(), out result)) { return(result); } else { throw new NotSupportedException("Node '" + Node.Print() + "' could not be encoded by any of the writer's known encoders."); } } } }
public void Print(int level = 0) { string text = "--"; for (int i = 0; i < level; i++) { text += "--"; } text += " " + num; Console.WriteLine(text); level++; if (LNode != null) { LNode.Print(level); } if (RNode != null) { RNode.Print(level); } }
Symbol NamespaceToSymbol(LNode node) { return(GSymbol.Get(node.Print(NodeStyle.Expression))); // quick & dirty }
Symbol NamespaceToSymbol(LNode node) { // quick & dirty, probably not cheap return(GSymbol.Get(node.Print(NodeStyle.Expression))); }