private ArrayTypeNode ArrayType(boolean constancy) throws SyntaxException {
        try {
            IntegerConstantLeaf length = null;
            Position pos = iterator.current().coordinates().starting();
            LeftSquareBracket();
            if (checkTokens(iterator.current(), Token.Type.CONST_INT)) {
                length = (IntegerConstantLeaf)Const();
            }
            RightSquareBracket();

            if (length == null) {
                return new ArrayTypeNode(Type(), constancy, pos);
            } else {
                return new ArrayTypeNode(Type(), length, constancy, pos);
            }
        } catch(SyntaxException ex) {
            throw ex;
        } catch(Exception ex) {
            throw (NonAnalysisException)new NonAnalysisException(ex)
                    .initPosition(iterator.current().coordinates().starting())
                    .Log("ru.bmstu.iu9.compiler.syntax");
        }
    }