private AstItem ReadFuncCall(TokenIterator tokens) { var name = tokens.PopExpected(TokenKind.Word); tokens.PopExpected(TokenKind.RoundBracketOpen); var paramValues = ReadBreaketedList(tokens, TokenKind.RoundBracketOpen, TokenKind.RoundBracketClose, TokenKind.Comma); var paramExpressions = new List <AstItem>(paramValues.Count); foreach (var valueTokens in paramValues) { var expression = ReadExpression(new TokenIterator(valueTokens), null); paramExpressions.Add(expression); } return(AstItem.FunctionCall(name.Value, paramExpressions)); }