private object CompileAssignment() { var node1 = CompileTernary(); if (Runtime.Equals(Token, "=")) { Accept(); var node2 = CompileAssignment(); return(Runtime.MakeList(Symbols.Setf, node1, node2)); } else { return(node1); } }
private object CompileTernary() { var node1 = CompileOr(); if (Runtime.Equals(Token, "?")) { Accept(); var node2 = CompileTernary(); if (!Runtime.Equals(Token, ":")) { throw new LispException("Invalid ternary expression in: {0}", InfixStr); } Accept(); var node3 = CompileTernary(); return(Runtime.MakeList(Symbols.If, node1, node2, node3)); } else { return(node1); } }