/** * <pre> * expr ::= seq ( '|' seq )* ; * </pre> */ private static List<? extends Pattern> parseExpr(final Tokens tokens, final List<Option> options) { List<Pattern> seq = parseSeq(tokens, options); if (!"|".equals(tokens.current())) { return seq; } final List<Pattern> result = (seq.size() > 1) ? list((Pattern) new Required( seq)) : seq; while ("|".equals(tokens.current())) { tokens.move(); seq = parseSeq(tokens, options); result.addAll((seq.size() > 1) ? list(new Required(seq)) : seq); } return (result.size() > 1) ? list(new Either(result)) : result; }
/** * <pre> * expr ::= seq ( '|' seq )* ; * </pre> */ private static List<? extends Pattern> parseExpr(final Tokens tokens, final List<Option> options) { List<Pattern> seq = parseSeq(tokens, options); if (!"|".equals(tokens.current())) { return seq; } final List<Pattern> result = (seq.size() > 1) ? list((Pattern) new Required( seq)) : seq; while ("|".equals(tokens.current())) { tokens.move(); seq = parseSeq(tokens, options); result.addAll((seq.size() > 1) ? list(new Required(seq)) : seq); } return (result.size() > 1) ? list(new Either(result)) : result; }
/** * <pre> * seq ::= ( atom [ '...' ] )* ; * </pre> */ private static List<Pattern> parseSeq(final Tokens tokens, final List<Option> options) { final List<Pattern> result = list(); // >>> while tokens.current() not in [None, ']', ')', '|'] while (!in(tokens.current(), null, "]", ")", "|")) { List<? extends Pattern> atom = parseAtom(tokens, options); if ("...".equals(tokens.current())) { atom = list(new OneOrMore(atom)); tokens.move(); } result.addAll(atom); } return result; }
/** * <pre> * seq ::= ( atom [ '...' ] )* ; * </pre> */ private static List<Pattern> parseSeq(final Tokens tokens, final List<Option> options) { final List<Pattern> result = list(); // >>> while tokens.current() not in [None, ']', ')', '|'] while (!in(tokens.current(), null, "]", ")", "|")) { List<? extends Pattern> atom = parseAtom(tokens, options); if ("...".equals(tokens.current())) { atom = list(new OneOrMore(atom)); tokens.move(); } result.addAll(atom); } return result; }
parsed.add(new Argument(null, tokens.move()));
parsed.add(new Argument(null, tokens.move()));