private Node parseSwitch() throws ParserError {
		if (!EAT(TokenType.OPEN)) {
			return null;
		}
		if (!EAT(TokenType.SWITCH)) {
			return null;
		}

		List<Node> list = new ArrayList<Node>();

		Node expr = parseExpr();
		if (expr == null) {
			throw new ParserError("Missing expression after SWITCH", this);
		}
		list.add(expr);

		if (!EAT(TokenType.CLOSE)) {
			throw new ParserError("Missing closing tag after SWITCH", this);
		}

		while (true) {
			Node caseNode = parseCase();
			if (caseNode != null) {
				list.add(caseNode);
				continue;
			}

			break;
		}

		if (!parseEnd()) {
			throw new ParserError("Missing END tag after SWITCH", this);
		}

		return new Node(NodeType.SWITCH, list, PREV_LINE_NUMBER());
	}