private Node parseLoop() {
		if (EAT(TokenType.LOOP)) {
			Node node = null;
			try (PositionSaver p = new PositionSaver(this)) {
				if (EAT(TokenType.DOT)) {
					if (CURRENT_TYPE() == TokenType.IDENT) {
						if ("count".equals(CURRENT_STRING())) {
							++pos;
							p.commit();
							node = new Node(NodeType.LOOP_COUNT,
									PREV_LINE_NUMBER());
						} else if ("index".equals(CURRENT_STRING())) {
							++pos;
							p.commit();
							node = new Node(NodeType.LOOP_INDEX,
									PREV_LINE_NUMBER());
						} else if ("has_next".equals(CURRENT_STRING())) {
							++pos;
							p.commit();
							node = new Node(NodeType.LOOP_HAS_NEXT,
									PREV_LINE_NUMBER());
						}
					}
				}
			}
			if (node == null) {
				node = new Node(NodeType.LOOP_INDEX, PREV_LINE_NUMBER());
			}
			return node;
		} else {
			return null;
		}
	}