java parser generator
home
features
documentation
grammars
downloads
site originally designed by ninth ave
/**
 *
 *                   dpANSI KIF grammar.
 *
 *                 This is grammar file of:
 *
 *               Knowledge Interchange Format
 *        draft proposed American National Standard
 *                      (dpANS KIF)
 *                    NCITS.T2/98-004
 *
 * This file is a KIF parser source file for SableCC
 * (Sable Compiler Compiler by Etienne Gagnon) which can be 
 * obtained at:    http://www.sable.mcgill.ca/sablecc
 * This file is used to produce OQL parser with related classes
 * and data structures.
 *
 * This is part of the New Zealand Distributed Information Systems (NZDIS)
 * project, conducted at the University of Otago, Dunedin, New Zealand,
 * under supervision of Professor Martin Purvis and Doctor Stephen Cranefield.
 *
 *
 * Copyright (C) 1998-2001 Mariusz Nowostawski and others.
 * All rights reserved.  (see doc/LICENSE and doc/AUTHORS)
 *
 * Contact:                
 * e-mail: mariusz@rakiura.org
 * 
 * This grammar lacks only:
 *   - character blocks
 * apart from that, this is full dpANS KIF grammar
 * and parser generated by SableCC will be compatibile
 * with dpANS KIF.
 * 
 * (Attention! Do not mix dpANS KIF with the older KIF 3.0
 *  while those two specs differ a little in theirs' grammars.)
 *
 * This file is part of the nzdis-kif package.
 *
 *
 * Version 1.1 $Revision: 1.1 $
 */


Package nzdis.lang.kif;

Helpers

 tab = 9;
 cr = 13;
 lf = 10;
 eol = cr lf | cr | lf |;
 white = (' ' | tab | eol)+ ;

 upper = ['A'..'Z'];
 lower = ['a'..'z'];
 digit = ['0'..'9'];

 alpha = [
          [
           [['!' + '$'] + ['%' + '&']] 
          +
           [['*' + '+'] + ['-' + '.']]
          ]
         +
          [
           [['/' + '<'] + ['@' + '?']]
          +
	   [['>' + '='] + ['_' + '~']]
          ]
         ];

 special = [[[['"' + '#'] + ['(' + ')']] + [[',' + '\'] + ['^' + '`']]] + '''] ;

 normal = [[upper + lower] + [digit + alpha]] ;

 word = (normal | '\' [[0 .. 0xffff] - [[10 + 13] + [9 + ' ']]]  )+;

 l_par  = '(';
 r_par  = ')';
 r_ap   = ''';
 u_arrow = '^';
 eq     = '=';
 ineq   = '/=';
 at     = '@';
 q_mark = '?';
 col_eq = ':=';
 quote = 'qoute';

 defobject   = 'defobject';
 deffunction = 'deffunction';
 defrelation = 'defrelation';
 deflogical  = 'deflogical';

 not = 'not';
 and = 'and';
 or  = 'or';
 dbl_r_arrow = '=>';
 dbl_l_arrow = '<=';
 arrow_dbl_arrow = '<=>';

 if  = 'if';
 cond = 'cond';
 value = 'value'; 
 listof = 'listof';
 holds = 'holds';
 forall = 'forall';
 exists = 'exists';

 col_dbl_r_arrow = ':=>';
 col_dbl_l_arrow = ':<=';
 col_r_arrow = ':->';
 

Tokens

 line_comment = '/' '/' [[0 .. 0xffff] - [cr + lf]]* eol |
                ';' [[0 .. 0xffff] - [cr + lf]]* eol ;

 multiline_comment = '/' '*' [[0 .. 0xffff] - ['*' + '/']]* '*' '/' ;

 string = '"' ([[0 .. 0xffff] - ['"' + '\']] | '\'[0 .. 0xffff])+ '"';

 charref = '#' '\' [0 .. 0xffff];

 l_par  = l_par;
 r_par  = r_par;
 r_ap   = r_ap;
 u_arrow = u_arrow;
 eq     = eq;
 ineq   = ineq;
 at     = at;
 q_mark = q_mark;
 col_eq = col_eq;
 quote = quote;

 defobject   = defobject;
 deffunction = deffunction;
 defrelation = defrelation;
 deflogical  = deflogical;

 not = not;
 and = and;
 or  = or;
 dbl_r_arrow = dbl_r_arrow;
 dbl_l_arrow = dbl_l_arrow;
 arrow_dbl_arrow = arrow_dbl_arrow;

 col_dbl_r_arrow = col_dbl_r_arrow;
 col_dbl_l_arrow = col_dbl_l_arrow;
 col_r_arrow = col_r_arrow;

 if  = if;
 cond = cond;
 value = value; 
 listof = listof;
 holds = holds;
 forall = forall;
 exists = exists;
 
 t_seqvar = '@' word ;
 t_indvar = '?' word ;

 ref_seqvar = ',@' word ;
 ref_indvar = ',?' word ;

 word = word;

 white = white;



Ignored Tokens

 white, line_comment, multiline_comment;



Productions

 base = {knowledge} form*;

 form = {sentence} sentence  | 
        {definition} definition ;

 sentence = {constant} constant |
	    {equation} equation |
            {inequality} inequality |
            {relsent} relsent |
            {logsent} logsent |
            {quantsent} quantsent ;

 definition = {unrestricted} unrestricted |
              {complete} complete |
              {partial} partial ;

 unrestricted = {defobject} l_par defobject constant string? sentence* r_par |
                {deffunction} l_par deffunction constant string? sentence* r_par |
                {defrelation} l_par defrelation constant string? sentence* r_par |
                {deflogical} l_par deflogical constant string? sentence* r_par ;

 complete = {defobject} l_par defobject constant string? col_eq term r_par |
            {deffunction} l_par deffunction constant 
                         [par1]:l_par indvar* seqvar? [par2]:r_par string? col_eq term r_par |
            {defrelation} l_par defrelation constant  
                         [par1]:l_par indvar* seqvar? [par2]:r_par string? col_eq sentence r_par |
            {deflogical} l_par deflogical constant string? col_eq sentence r_par ; 

 partial = 
        {defobject_l} l_par defobject constant string? col_r_arrow indvar 
					col_dbl_l_arrow sentence r_par |
        {defobject_r} l_par defobject constant string? col_r_arrow indvar 
					col_dbl_r_arrow sentence r_par |

        {deflogical_l} l_par deflogical constant string? col_dbl_l_arrow sentence r_par |
        {deflogical_r} l_par deflogical constant string? col_dbl_r_arrow sentence r_par |

        {deffunction_l} l_par deffunction constant 
				[par1]:l_par indvar* seqvar? [par2]:r_par string? 
				col_r_arrow [a]:indvar col_dbl_l_arrow sentence r_par |
        {deffunction_r} l_par deffunction constant 
				[par1]:l_par indvar* seqvar? [par2]:r_par string? 
				col_r_arrow [a]:indvar col_dbl_r_arrow sentence r_par |

        {defrelation_l} l_par defrelation constant 
				[par1]:l_par indvar* seqvar? [par2]:r_par string? 
				col_dbl_l_arrow sentence r_par |
        {defrelation_r} l_par defrelation constant 
				[par1]:l_par indvar* seqvar? [par2]:r_par string? 
				col_dbl_r_arrow sentence r_par ;


 equation = l_par eq [left]:term [right]:term r_par ;

 inequality = l_par ineq [left]:term [right]:term r_par ;

 relsent = {implicit} l_par constant term* seqvar? r_par |
           {explicit} l_par holds [first]:term [rest]:term* seqvar? r_par;

 varspec = {single} variable |
           {list} l_par variable constant r_par ;

 variable = {indvar} indvar | 
            {seqvar}  seqvar ;

 indvar = t_indvar;
 seqvar = t_seqvar;

 funterm = {implicit} l_par constant term* seqvar? r_par |
           {explicit} l_par value [first]:term [rest]:term* seqvar? r_par;

 listterm = l_par listof term* seqvar? r_par;

 quoterm = {par}  l_par quote listexpr r_par |
           {simple1} r_ap listexpr |
           {simple2} u_arrow listexpr;

 listexpr = {indvar} indvar |
	    {seqvar} seqvar |
	    {word} word |
            {defined_symbol} defined |
	    {string} string |	
            {charref} charref |
	    {seqvar_ref} ref_seqvar |
            {indvar_ref} ref_indvar |
            {multi} l_par listexpr* r_par ;

 logterm = {if}  l_par if sentence [true]:term [false]:term? r_par |
	  {cond} l_par cond logitem* r_par ;

 logitem = l_par sentence term r_par;

 logsent = {negation} l_par not sentence r_par |
           {conjunction} l_par and sentence* r_par |
           {disjunction} l_par or sentence* r_par |
           {implication} l_par dbl_r_arrow [rest]:sentence* [last]:sentence r_par |
        {reverse_implication} l_par dbl_l_arrow [first]:sentence [rest]:sentence* r_par |
           {equivalence} l_par arrow_dbl_arrow [first]:sentence [last]:sentence r_par ;

 quantsent = {universal}   l_par forall [par1]:l_par varspec+ [par2]:r_par 
								sentence r_par |
             {existential} l_par exists [par1]:l_par varspec+ [par2]:r_par sentence r_par ;

 identifier = {word} word;

 constant = identifier;

 term = {indvar} indvar |
        {constant} constant |
        {charref} charref |
        {string} string |
        {funterm} funterm |
        {listterm} listterm |
        {quoterm} quoterm |
        {logterm} logterm ;
 
 defined = {r_ap} r_ap |
	   {u_arrow} u_arrow |
	   {eq} eq |
	   {ineq} ineq |
	 {at} at |
	 {q_mark} q_mark |
	 {col_eq} col_eq |
	 {quote} quote |
	 {defobject} defobject |
	 {deffunction} deffunction |
	 {defrelation} defrelation |
	 {deflogical} deflogical |
	 {not} not |
	 {and} and |
	 {or} or |
	 {dbl_r_arrow} dbl_r_arrow |
	 {dbl_l_arrow} dbl_l_arrow |
	 {arrow_dbl_arrow} arrow_dbl_arrow |
	 {col_dbl_r_arrow} col_dbl_r_arrow |
	 {col_dbl_l_arrow} col_dbl_l_arrow |
	 {col_r_arrow} col_r_arrow |
	 {if} if |
	 {cond} cond |
	 {value} value |
	 {listof} listof |
	 {holds} holds |
	 {forall} forall |
	 {exists} exists ;


/* ***********    end of file    *********** */

This site has been last updated by the web master on 2007/6/24.