private List<FunctionTypeNode.ArgumentNode> IdentifierList()
            throws SyntaxException {
        try {
            List<FunctionTypeNode.ArgumentNode> vars = 
                    new LinkedList<FunctionTypeNode.ArgumentNode>();

            Position pos = iterator.current().coordinates().starting();
            String name = Identifier();
            if (iterator.current().type().is(Token.Type.COMMA)) {
                nextToken();
                vars.addAll(IdentifierList());
                vars.add(
                    0,
                    new FunctionTypeNode.ArgumentNode(name, vars.get(0).type, pos)
                );
            } else {
                BaseTypeNode type = Type();
                vars.add(0, new FunctionTypeNode.ArgumentNode(name, type, pos));
            }

            return vars;
        } catch(SyntaxException ex) {
            throw ex;
        } catch(Exception ex) {
            throw (NonAnalysisException)new NonAnalysisException(ex)
                    .initPosition(iterator.current().coordinates().starting())
                    .Log("ru.bmstu.iu9.compiler.syntax");
        }
    }