testrecursivedescentparser.java

来自「Grammatica is a C# and Java parser gener」· Java 代码 · 共 573 行 · 第 1/2 页

JAVA
573
字号
        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 + =
减小字号Ctrl + -
显示快捷键?