AbstractNode statement() {
		AbstractNode node = null;

		if (test(IF)) {
			node = ifStatement();
		} else if (test(PRINT)) {
			read(PRINT, "PRINT");
			node = new PrintNode(expr());
		} else if (test(WHILE)) {
			node = whileStatement();
		} else if (test(REPEAT)) {
			node = repeatStatement();
		} else if (test(IDENT)) {
            if (testLookAhead(LPAR)) {
                node = procedureCall();
            } else {
				node = assignment();
			}
		}

		return node;
	}