public static Parser make(ParsingPage currentPage, CharSequence input, SymbolProvider provider) { ParseSpecification specification = new ParseSpecification().provider(provider); return new Parser(null, currentPage, new Scanner(new TextMaker(currentPage, currentPage.getNamedPage()), input), specification); }
public static Parser make(ParsingPage currentPage, CharSequence input, SymbolProvider provider) { ParseSpecification specification = new ParseSpecification().provider(provider); return new Parser(null, currentPage, new Scanner(new TextMaker(currentPage, currentPage.getNamedPage()), input), specification); }
public Symbol parseWithParent(String input, Parser parent) { return new Parser(parent, currentPage, new Scanner(new TextMaker(currentPage, currentPage.getNamedPage()), input), new ParseSpecification().provider(specification)).parse(); }
public Symbol parseWithParent(String input, Parser parent) { return new Parser(parent, currentPage, new Scanner(new TextMaker(currentPage, currentPage.getNamedPage()), input), new ParseSpecification().provider(specification)).parse(); }
/** * * @param parser parser * @param scanner scanner * @return a possible value if parser should stop. */ public Maybe<Symbol> parseSymbol(Parser parser, Scanner scanner) { while (true) { Scanner backup = new Scanner(scanner); scanner.moveNextIgnoreFirst(this); if (scanner.isEnd()) return Maybe.nothingBecause("scanner is at end of buffer"); Symbol currentToken = scanner.getCurrent(); int startOffset = currentToken.getStartOffset(); if (endsOn(currentToken.getType()) || parser.parentOwns(currentToken.getType(), this)) { scanner.copy(backup); return Maybe.nothingBecause("At termination symbol or parent owns symbol"); } if (terminatesOn(currentToken.getType())) return Maybe.nothingBecause("At termination symbol"); Rule currentRule = currentToken.getType().getWikiRule(); Maybe<Symbol> parsedSymbol = currentRule.parse(currentToken, parser); if (parsedSymbol.isNothing()) { ignoreFirst(currentToken.getType()); scanner.copy(backup); } else { parsedSymbol.getValue().setStartOffset(startOffset).setEndOffset(scanner.getOffset()); clearIgnoresFirst(); return parsedSymbol; } } }
/** * * @param parser parser * @param scanner scanner * @return a possible value if parser should stop. */ public Maybe<Symbol> parseSymbol(Parser parser, Scanner scanner) { while (true) { Scanner backup = new Scanner(scanner); scanner.moveNextIgnoreFirst(this); if (scanner.isEnd()) return Maybe.nothingBecause("scanner is at end of buffer"); Symbol currentToken = scanner.getCurrent(); int startOffset = currentToken.getStartOffset(); if (endsOn(currentToken.getType()) || parser.parentOwns(currentToken.getType(), this)) { scanner.copy(backup); return Maybe.nothingBecause("At termination symbol or parent owns symbol"); } if (terminatesOn(currentToken.getType())) return Maybe.nothingBecause("At termination symbol"); Rule currentRule = currentToken.getType().getWikiRule(); Maybe<Symbol> parsedSymbol = currentRule.parse(currentToken, parser); if (parsedSymbol.isNothing()) { ignoreFirst(currentToken.getType()); scanner.copy(backup); } else { parsedSymbol.getValue().setStartOffset(startOffset).setEndOffset(scanner.getOffset()); clearIgnoresFirst(); return parsedSymbol; } } }