Statement ParseCompoundStatement(TokenRange toks) { var first = toks.First(NonWhitespace); if (first.Value == "{") { var inBraces = first.GetMatchingRangeIn(toks); if (!range(inBraces.End, toks.End).Consume("}").All(Whitespace)) { throw new Error(inBraces.Last().SourceLine, "Unexpected tokens after compound statement"); } return(ParseCodeBlock(inBraces)); } else { List <Statement> statements = new List <Statement>(); ParseStatement(toks.Skip(1), statements); return(statements[0]); } }