private StructDeclNode StructDecl() throws SyntaxException {
        try {
            Position pos = iterator.current().coordinates().starting();
            nextToken();

            String structName = Identifier();
            BlockDeclNode decls = new BlockDeclNode();

            LeftBrace();
            while (iterator.current().type().is(Token.Type.IDENTIFIER)) {
                decls.addChildren(FieldDecl());
            }
            RightBrace();

            return new StructDeclNode(
                    structName, 
                    new StructTypeNode(structName, false, pos),
                    decls,
                    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");
        }
    }