    001    // This file is part of the Attempto Java Packages.
    002    // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
    003    //
    004    // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
    005    // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
    006    // either version 3 of the License, or (at your option) any later version.
    007    //
    008    // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
    009    // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    010    // PURPOSE. See the GNU Lesser General Public License for more details.
    011    //
    012    // You should have received a copy of the GNU Lesser General Public License along with the Attempto
    013    // Java Packages. If not, see http://www.gnu.org/licenses/.
    014
    015    package ch.uzh.ifi.attempto.preditor.example;
    016
    017    import ch.uzh.ifi.attempto.chartparser.Grammar;
    018    import ch.uzh.ifi.attempto.chartparser.Nonterminal;
    019    import ch.uzh.ifi.attempto.chartparser.Rule;
    020    import ch.uzh.ifi.attempto.chartparser.Terminal;
    021
    022    /**
    023     * This class is an examplary implementation of a grammar. See the
    024     * <a href="{@docRoot}/src-html/ch/uzh/ifi/attempto/preditor/example/ExampleGrammar.html#line.1">source code</a>.
    025     *
    026     * @author Tobias Kuhn
    027     */
    028    public class ExampleGrammar extends Grammar {
    029
    030            /**
    031             * Creates a new grammar instance.
    032             */
    033            public ExampleGrammar() {
    034                    // "text" is the start symbol
    035                    super("text");
    036
    037                    // Now the grammar rules are added. The comment lines show how the rules would be expressed in ACGN.
    038
    039                    // text => [].
    040                    addRule(new Rule(new Nonterminal("text"), true));
    041
    042                    // text => s, ['.'], text.
    043                    addRule(new Rule(new Nonterminal("text"), true, new Nonterminal("s"), new Terminal("."), new Nonterminal("text")));
    044
    045                    // s => exist_np, vp.
    046                    addRule(new Rule(new Nonterminal("s"), true, new Nonterminal("exist_np"), new Nonterminal("vp")));
    047
    048                    // s ~> univ_np, vp.
    049                    addRule(new Rule(new Nonterminal("s"), false, new Nonterminal("univ_np"), new Nonterminal("vp")));
    050
    051                    // univ_np => [every, 'N'], var.
    052                    addRule(new Rule(new Nonterminal("univ_np"), true, new Terminal("every"), new Terminal("N"), new Nonterminal("var")));
    053
    054                    // univ_np => [no, 'N'], var.
    055                    addRule(new Rule(new Nonterminal("univ_np"), true, new Terminal("no"), new Terminal("N"), new Nonterminal("var")));
    056
    057                    // exist_np => [a, 'N'], var.
    058                    addRule(new Rule(new Nonterminal("exist_np"), true, new Terminal("a"), new Terminal("N"), new Nonterminal("var")));
    059
    060                    // exist_np => ['PN'].
    061                    addRule(new Rule(new Nonterminal("exist_np"), true, new Terminal("PN")));
    062
    063                    // exist_np => ['REF'].
    064                    addRule(new Rule(new Nonterminal("exist_np"), true, new Terminal("REF")));
    065
    066                    // var => [].
    067                    addRule(new Rule(new Nonterminal("var"), true));
    068
    069                    // var => ['VAR'].
    070                    addRule(new Rule(new Nonterminal("var"), true, new Terminal("VAR")));
    071
    072                    // vp => ['IV'].
    073                    addRule(new Rule(new Nonterminal("vp"), true, new Terminal("IV")));
    074
    075                    // vp => ['TV'], exist_np.
    076                    addRule(new Rule(new Nonterminal("vp"), true, new Terminal("TV"), new Nonterminal("exist_np")));
    077
    078                    // vp ~> ['TV'], univ_np.
    079                    addRule(new Rule(new Nonterminal("vp"), false, new Terminal("TV"), new Nonterminal("univ_np")));
    080
    081            }
    082
    083    }