package net.zero918nobita.Xemime.parser;

import net.zero918nobita.Xemime.ast.BlockNode;
import net.zero918nobita.Xemime.ast.Node;
import net.zero918nobita.Xemime.lexer.Lexer;
import net.zero918nobita.Xemime.lexer.TokenType;
import net.zero918nobita.Xemime.resolver.Resolver;

import java.util.ArrayList;

/**
 * ブロック式を構文解析します。
 * @author Kodai Matsumoto
 */

class Block extends ParseUnit {
    Block(Lexer lexer, Resolver resolver) {
        super(lexer, resolver);
    }

    @Override
    Node parse() throws Exception {
        ArrayList<Node> list = null;
        getToken();
        resolver.addScope();
        while (lexer.tokenType() != TokenType.RB) {
            Node node = new Expr(lexer, resolver).parse();
            if (lexer.tokenType() == TokenType.SEMICOLON) {
                if (list == null) list = new ArrayList<>();
                list.add(node);
            } else {
                throw new SyntaxError(lexer.getLocation(), 7, "ブロック式内のステートメントにセミコロンが付いていません。");
            }
            getToken();
        }
        resolver.removeScope();
        getToken();
        return new BlockNode(lexer.getLocation(), list);
    }
}

@@ -888,16 +888,80 @@
  else %7B%0A
+                // Syntax Error - %E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E5%BC%8F%E5%86%85%E3%81%AE%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AB%E3%82%BB%E3%83%9F%E3%82%B3%E3%83%AD%E3%83%B3%E3%81%8C%E4%BB%98%E3%81%84%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A
         

Improve readability