private static void parse()

in src/main/java/com/epam/eco/commons/avro/io/parsing/GrammarErrorParser.java [56:89]


    private static void parse(LinkedList<Symbol> productionStack, Path path, List<GrammarError> errors) {
        Symbol symbol = productionStack.pollLast();
        if (symbol == null) {
            return;
        }

        if (symbol.kind == Kind.IMPLICIT_ACTION) {
            if (symbol instanceof FieldOrderAction) {
                for (Schema.Field field : ((FieldOrderAction)symbol).fields) {
                    path.append(field.name());
                    parse(productionStack, path, errors);
                    path.subtract();
                }
            } else if (symbol instanceof ErrorAction) {
                errors.add(new GrammarError(path.getPathString(), ((ErrorAction)symbol).msg));
            } else {
                parse(productionStack, path, errors);
            }
        } else if (symbol.kind == Kind.TERMINAL) {
            if (ARRAY_START_TERMINAL.equals(symbol.toString())) {
                parse(productionStack, path, errors);
            }
        } else if (
                symbol.kind == Kind.REPEATER ||
                symbol.kind == Kind.SEQUENCE) {
            parse(new LinkedList<>(Arrays.asList(symbol.production)), path, errors);
        } else if (symbol.kind == Kind.ALTERNATIVE) {
            parse(new LinkedList<>(Arrays.asList(((Alternative)symbol).symbols)), path, errors);
        } else if (symbol.kind == Kind.EXPLICIT_ACTION) {
            // nothing to do
        } else {
            throw new RuntimeException("Unknown symbol kind: " + symbol.kind);
        }
    }