📄 testrecursivedescentparser.java
字号:
addPattern(parser, pattern); failPrepareParser(parser); } /** * Tests an unresolvable token conflict inside a production * alternative. */ public void testElementTokenConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 0, 1); alt.addToken(T1, 1, -1); addAlternative(pattern, alt); addPattern(parser, pattern); failPrepareParser(parser); } /** * Tests an unresolvable production conflict inside a production * alternative. */ public void testElementProductionConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addProduction(P2, 0, 1); alt.addProduction(P3, 1, 1); alt.addToken(T2, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); pattern = new ProductionPattern(P2, "P2"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, 1); alt.addProduction(P2, 0, 1); addAlternative(pattern, alt); addPattern(parser, pattern); pattern = new ProductionPattern(P3, "P3"); alt = new ProductionPatternAlternative(); addAlternative(pattern, alt); alt.addToken(T1, 1, -1); addPattern(parser, pattern); failPrepareParser(parser); } /** * Tests an unresolvable production conflict in the tail of a * production alternative. */ public void testElementTailConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addProduction(P2, 1, 1); alt.addToken(T2, 0, 1); addAlternative(pattern, alt); addPattern(parser, pattern); pattern = new ProductionPattern(P2, "P2"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, 1); alt.addToken(T2, 0, 1); addAlternative(pattern, alt); addPattern(parser, pattern); // TODO: enable this test // failPrepareParser(parser); } /** * Tests a resolvable conflict between two production patterns. */ public void testResolvableProductionConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addProduction(P2, 1, 1); addAlternative(pattern, alt); alt = new ProductionPatternAlternative(); alt.addProduction(P3, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); pattern = new ProductionPattern(P2, "P2"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, 1); alt.addToken(T1, 0, 1); alt.addToken(T2, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); pattern = new ProductionPattern(P3, "P3"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, -1); alt.addToken(T3, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); prepareParser(parser); } /** * Tests a resolvable conflict between two production * alternatives. */ public void testResolvableAlternativeConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, 1); alt.addToken(T1, 0, 1); alt.addToken(T2, 1, 1); addAlternative(pattern, alt); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, -1); alt.addToken(T3, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); prepareParser(parser); } /** * Tests a resolvable token conflict inside a production * alternative. */ public void testResolvableElementTokenConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 0, 1); alt.addToken(T1, 1, 1); alt.addToken(T2, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); prepareParser(parser); } /** * Tests a resolvable production conflict inside a production * alternative. */ public void testResolvableElementProductionConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addProduction(P2, 0, 1); alt.addToken(T1, 1, -1); addAlternative(pattern, alt); addPattern(parser, pattern); pattern = new ProductionPattern(P2, "P2"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, 1); alt.addToken(T2, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); prepareParser(parser); } /** * Tests a resolvable production conflict in the tail of a * production alternative. */ public void testResolvableElementTailConflict() { Parser parser = createParser(); pattern = new ProductionPattern(P1, "P1"); alt = new ProductionPatternAlternative(); alt.addProduction(P2, 1, 1); alt.addToken(T2, 1, 1); addAlternative(pattern, alt); addPattern(parser, pattern); pattern = new ProductionPattern(P2, "P2"); alt = new ProductionPatternAlternative(); alt.addToken(T1, 1, 1); alt.addToken(T2, 0, 1); addAlternative(pattern, alt); addPattern(parser, pattern); prepareParser(parser); } /** * Creates a new parser. * * @return a new parser */ private Parser createParser() { return new RecursiveDescentParser(null); } /** * Prepares the parser and reports a test failure if it failed. * * @param parser the parser to prepare */ private void prepareParser(Parser parser) { try { parser.prepare(); } catch (ParserCreationException e) { fail(e.getMessage()); } } /** * Prepares the parser and reports a test failure if it succeeded. * * @param parser the parser to prepare */ private void failPrepareParser(Parser parser) { try { parser.prepare(); fail(); } catch (ParserCreationException e) { // Failure was expected } } /** * Adds a production pattern to a parser and reports a test * failure if it failed. * * @param parser the parser to add a pattern to * @param pattern the production pattern to add */ private void addPattern(Parser parser, ProductionPattern pattern) { try { parser.addPattern(pattern); } catch (ParserCreationException e) { fail("couldn't add pattern " + pattern.getName() + ": " + e.getMessage()); } } /** * Adds a production pattern to a parser and reports a test * failure if it succeeded. * * @param parser the parser to add a pattern to * @param pattern the production pattern to add */ private void failAddPattern(Parser parser, ProductionPattern pattern) { try { parser.addPattern(pattern); fail("could add pattern " + pattern.getName()); } catch (ParserCreationException e) { // Failure was expected } } /** * Adds a pattern alternative. This method reports a test failure * if an exception was thrown. * * @param pattern the production pattern * @param alt the pattern alternative to add */ private void addAlternative(ProductionPattern pattern, ProductionPatternAlternative alt) { try { pattern.addAlternative(alt); } catch (ParserCreationException e) { fail("couldn't add alternative to " + pattern.getName() + ": " + e.getMessage()); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -