Function parseLines(final List<String> lines) throws AssemblerSyntaxException {
        resetCurrentLine();
        for (final String line : lines) {
            incCurrentLine();

            if (StringUtils.isBlank(line)) {
                continue;
            }

            final List<Token> tokens = scanner.parse(line);

            if (tokens.isEmpty()) {
                continue;
            }

            switch (tokens.get(0).getType()) {
                case METACODE:
                    parseMetaCode(tokens);
                    break;
                case OPCODE:
                    parseOpCode(tokens);
                    break;
                default:
                    throw new AssemblerSyntaxException(
                            String.format("First token of line neither mnemonic nor metacode!"), getCurrentLine());
            }
        }

        if (1 != functions.size()) {
            throw new AssemblerSyntaxException(
                    "There must be exactly one function on parse stack at end of parsen! Found " + functions.size());
        }

        return functions.pop();
    }