⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testrecursivedescentparser.cs

📁 Grammatica is a C# and Java parser generator (compiler compiler). It improves upon simlar tools (lik
💻 CS
📖 第 1 页 / 共 2 页
字号:
    /**     * 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.Message);        }    }    /**     * 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("succeeded in preparing parser");        } 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.Message);        }    }    /**     * 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.Message);        }    }    /**     * Throws a test fail exception.     *     * @param message         the test error message     */    private void Fail(string message) {        throw new Exception(message);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -