LispEngine.Parsing.Parser.compound C# (CSharp) Method

compound() private method

private compound ( ) : Datum
return Datum
        private Datum compound()
        {
            if (next.Type != TokenType.Open)
                return null;
            readNext();
            var elements = new List<Datum>();
            var cdr = nil;
            while(next.Type != TokenType.Close)
            {
                if (elements.Count > 0 && next.Type == TokenType.Dot)
                {
                    cdr = readCdr();
                    break;
                }
                elements.Add(expression());
                expectNext(")");
            }
            elements.Reverse();
            var result = elements.Aggregate(cdr, (current, d) => cons(d, current));
            var resultPair = result as Pair;
            if(resultPair != null)
                resultPair.Location = string.Format("{0}:{1}", s.Filename, s.LineNumber);
            return result;
        }