content: // This file is part of AceWiki.
  // Copyright 2008-2013, AceWiki developers.
  // 
  // AceWiki is free software: you can redistribute it and/or modify it under the terms of the GNU
  // Lesser General Public License as published by the Free Software Foundation, either version 3 of
  // the License, or (at your option) any later version.
  // 
  // AceWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  // even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  // Lesser General Public License for more details.
  // 
  // You should have received a copy of the GNU Lesser General Public License along with AceWiki. If
  // not, see http://www.gnu.org/licenses/.
  
  /**
   * This package contains transformation programs for the Codeco notation. These programs are not
   * written in Java but in SWI Prolog. Among other output formats, Java code can automatically be
   * generated. This package consists of the following programs:
   * <ul>
   * <li><a href="validate_codeco.pl" target="_top">validate_codeco.pl</a></li>
   * <li><a href="generate_dcg.pl" target="_top">generate_dcg.pl</a></li>
   * <li><a href="generate_java.pl" target="_top">generate_java.pl</a></li>
   * <li><a href="generate_html.pl" target="_top">generate_html.pl</a></li>
   * <li><a href="generate_latex.pl" target="_top">generate_latex.pl</a></li>
   * </ul>
   * Below, the Codeco notation is briefly described and it is shown how the different transformation
   * programs can be run.
   *<p>
   * The doctoral thesis "<a href="http://attempto.ifi.uzh.ch/site/pubs/papers/doctoral_thesis_kuhn.pdf"
   * >Controlled English for Knowledge Representation</a>" describes the Codeco notation in detail.
   * 
   * 
   * <h4>Codeco Notation</h4>
   * 
   * Codeco stands for "COncrete and DEclarative grammar notation for COntrolled natural languages"
   * and is a Prolog-based notation that allows for defining grammars for controlled natural
   * languages in a convenient way. The most important features of Codeco are introduced below.
   *<p>
   * Simple grammar rules in Codeco look almost the same as common Prolog DCG rules. The only
   * difference is that the operator "<code>=></code>" is used instead of "<code>--></code>":
   *<blockquote><pre>
   * vp => v, np.
   * v => ['does not'], verb.
   *</pre></blockquote>
   * Terminal categories are represented in square brackets.
   *<p>
   * Complex grammar rules in Codeco are different from common Prolog DCG rules in the sense that
   * they are using features rather than arguments with fixed positions. Arguments are not recognized
   * by their position but by their name:
   *<blockquote><pre>
   * vp(num:Num,neg:Neg) => v(num:Num,neg:Neg,type:tr), np(case:acc).
   * v(neg:plus,type:Type) => [does, not], verb(type:Type).
   *</pre></blockquote>
   * Every feature has the form <code>Name:Value</code> where <code>Name</code> has to be an atom and
   * <code>Value</code> can be a variable or an atom (but not a compound term).
   *<p>
   * Codeco has special support for pre-terminal categories. Such categories are marked with the
   * dollar sign "$" and can expand only to terminal categories:
   *<blockquote><pre>
   * np => [a], $noun(text:Noun).
   * $noun(text:country) => [country].
   *</pre></blockquote>
   *<p>
   * Codeco also provides special support for anaphoric references. Anaphoric references are used in
   * (controlled) natural languages to refer to objects earlier in the sentence. For example, in the
   * sentence
   *<blockquote><i>
   * A country contains an area that is not controlled by the country.
   *</i></blockquote>
   * the anaphoric reference "the country" refers to the antecedent "a country". In Codeco, anaphoric
   * references are defined by the special categories "<code>></code>" and "<code><</code>".
   * "<code>></code>" marks a position in the text to which anaphoric references can refer (such
   * positions are called "antecedents"). "<code><</code>" refers back to the closed possible
   * antecedent. An example is shown here:
   *<blockquote><pre>
   * np => [a], $noun(text:Noun), >(type:noun, noun:Noun).
   * ref => [the], $noun(text:Noun), <(type:noun, noun:Noun).
   *</pre></blockquote>
   * Furthermore, the special category "<code>/<</code>" can be used to ensure that there is no
   * matching antecedent. This can be used, for example, for variables to ensure that no variable is
   * introduced twice:
   *<blockquote><pre>
   * np => $var(text:Var), /<(type:var, var:V), >(type:var, var:V).
   *</pre></blockquote>
   * The back-referring categories "<code><</code>" and "<code>/<</code>" have to immediately follow
   * a terminal or pre-terminal category.
   *<p>
   * Codeco has some more features, which are explained in the publication mentioned above.
   * 
   *
   * <h4>Transformations</h4>
   * 
   * Codeco grammars can be translated automatically into a Java class or into a Prolog DCG grammar,
   * using the SWI Prolog programs "generate_java.pl" or "generate_dcg.pl", respectively. These
   * programs can be found in the directory "src/ch/uzh/ifi/attempto/codeco" of the AceWiki system
   * and are linked above. The Java class can be generated like this:
   *<blockquote><pre>
   * swipl -s generate_java.pl -g "generate_java('my_codeco_grammar.pl', 'my.package.MyGrammarClass')" -t halt
   *</pre></blockquote>
   * Note that the SWI Prolog command might be different on your machine (e.g. "<code>plcon</code>"
   * or "<code>pl</code>"). The Prolog DCG file can be generated like this:
   *<blockquote><pre>
   * swipl -s generate_dcg.pl -g "generate_dcg('my_codeco_grammar.pl', 'my_dcg_grammar.pl')" -t halt
   *</pre></blockquote>
   *<p>
   * Furthermore, this package provides the programs "generate_html.pl" and "generate_latex.pl",
   * which can be used to generate HTML and LaTeX representations of Codeco grammars. These programs
   * are used as follows:
   *<blockquote><pre>
   * swipl -s generate_html.pl -g "generate_html('my_codeco_grammar.pl', 'my_html_file.html')" -t halt
   * swipl -s generate_latex.pl -g "generate_latex('my_codeco_grammar.pl', 'my_latex_file.tex')" -t halt
   *</pre></blockquote>
   * 
   * 
   * @author Tobias Kuhn
   */
  package ch.uzh.ifi.attempto.codeco;
  