Example usage for org.antlr.v4.runtime UnbufferedTokenStream index

List of usage examples for org.antlr.v4.runtime UnbufferedTokenStream index

Introduction

In this page you can find the example usage for org.antlr.v4.runtime UnbufferedTokenStream index.

Prototype

@Override
    public int index() 

Source Link

Usage

From source file:io.mindmaps.graql.internal.parser.QueryParser.java

License:Open Source License

/**
 * @param inputStream a stream representing a list of patterns
 * @return a stream of patterns//from   w  ww.  j  a  va  2  s  .co m
 */
public Stream<Pattern> parsePatterns(InputStream inputStream) {
    GraqlLexer lexer = new GraqlLexer(new UnbufferedCharStream(inputStream));
    lexer.setTokenFactory(new CommonTokenFactory(true));
    UnbufferedTokenStream tokens = new UnbufferedTokenStream(lexer);

    // Create an iterable that will keep parsing until EOF
    Iterable<Pattern> iterable = () -> new Iterator<Pattern>() {

        private Pattern pattern = null;

        private Optional<Pattern> getNext() {

            if (pattern == null) {
                if (tokens.get(tokens.index()).getType() == Token.EOF) {
                    return Optional.empty();
                }

                pattern = parseQueryFragment(GraqlParser::patternSep, QueryVisitor::visitPatternSep, tokens);
            }
            return Optional.of(pattern);
        }

        @Override
        public boolean hasNext() {
            return getNext().isPresent();
        }

        @Override
        public Pattern next() {
            Optional<Pattern> result = getNext();
            pattern = null;
            return result.orElseThrow(NoSuchElementException::new);
        }
    };

    return StreamSupport.stream(iterable.spliterator(), false);
}

From source file:io.mindmaps.graql.QueryParser.java

License:Open Source License

public Stream<Pattern> parsePatternsStream(InputStream inputStream) {
    GraqlLexer lexer = new GraqlLexer(new UnbufferedCharStream(inputStream));
    lexer.setTokenFactory(new CommonTokenFactory(true));
    UnbufferedTokenStream tokens = new UnbufferedTokenStream(lexer);

    // Create an iterable that will keep parsing until EOF
    Iterable<Pattern> iterable = () -> new Iterator<Pattern>() {

        private Pattern pattern = null;

        private Optional<Pattern> getNext() {

            if (pattern == null) {
                if (tokens.get(tokens.index()).getType() == Token.EOF) {
                    return Optional.empty();
                }//from  www .j  ava 2s.c  om

                pattern = parseQueryFragment(GraqlParser::patternSep, QueryVisitor::visitPatternSep, tokens);
            }
            return Optional.of(pattern);
        }

        @Override
        public boolean hasNext() {
            return getNext().isPresent();
        }

        @Override
        public Pattern next() {
            Optional<Pattern> result = getNext();
            pattern = null;
            return result.orElseThrow(NoSuchElementException::new);
        }
    };

    return StreamSupport.stream(iterable.spliterator(), false);
}