%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                           %
%       file:           top.pl                                              %
%       purpose:        load file, Prolog and grammar declarations          %
%       author:         Sebastian Varges                                    %
%       date:           Wed Feb 12 14:44:24 MET 1997                        %
%       related files:  chart.pl, aux.pl, head.pl, memo_head.pl, grammar.pl %
%                       test_suite.pl, tests.pl                             %
%                                                                           %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% missing chain/2, non_chain/1 and table_item/4 predicates are treated as 
% simple failures:
:- prolog_flag(unknown,_,fail).  

:- op(1200,xfx,<---).
:- ensure_loaded(head).
:- ensure_loaded(memo_head).
:- ensure_loaded(chart).
:- ensure_loaded(aux).
:- ensure_loaded(grammar).
:- ensure_loaded(test_suite).
:- ensure_loaded(tests).
:- use_module(library(terms)).
%------------ interpreter calls -------------
proc(hd,FS) :- head_proc(FS).
proc(mhd,FS) :- memo_hd_proc(FS).
proc(ed,FS) :- earley_proc(FS,all,df,off,off). 

%------ (compilable) grammar information ------
% all grammar rules as chain rules
chain_rule([_,syn:[s|_],_],1,left).     
chain_rule([_,syn:[vp|_],_],2,right).
chain_rule([_,syn:[vp|_],_],3,unary).
chain_rule([_,syn:[np|_],_],4,left). 
chain_rule([_,syn:[np|_],_],5,unary).

head_link([_,syn:[s|_],Sem],[_,syn:[vp|_],Sem]).
head_link([_,syn:[s|_],Sem],[_,syn:[v|_],Sem]).
head_link([_,syn:[vp|_],Sem],[_,syn:[v|_],Sem]).
head_link([_,syn:[np|_],Sem],[_,syn:[pn|_],Sem]).
head_link([_,syn:[np|R],Sem],[_,syn:[n|R],Sem]). % coindexing syntaktic features
head_link(X,X).
/*
% only vp-complement rule 2 as chain rule
chain_rule([_,syn:[vp|_],_],2,right).

nonchain_rule([_,syn:[s|_],_],1,rule). 
nonchain_rule([_,syn:[vp|_],_],3,rule). 
nonchain_rule([_,syn:[np|_],_],4,rule). 
nonchain_rule([_,syn:[np|_],_],5,rule). 

head_link([_,syn:[vp|_],Sem],[_,syn:[vp|_],Sem]).
head_link(X,X) :- \+ X = [_,syn:[vp|_],_].
*/

% declarations for lexical entries
nonchain_rule([_,syn:[det|_],_],6,lex). 
nonchain_rule([_,syn:[det|_],_],7,lex). 
nonchain_rule([_,syn:[det|_],_],8,lex). 
nonchain_rule([_,syn:[det|_],_],9,lex). 
nonchain_rule([_,syn:[det|_],_],10,lex). 
nonchain_rule([_,syn:[det|_],_],11,lex). 
nonchain_rule([_,syn:[det|_],_],12,lex). 
nonchain_rule([_,syn:[det|_],_],13,lex). 

nonchain_rule([_,syn:[n|_],_],14,lex). 
nonchain_rule([_,syn:[n|_],_],15,lex). 
nonchain_rule([_,syn:[n|_],_],16,lex). 
nonchain_rule([_,syn:[n|_],_],17,lex). 
nonchain_rule([_,syn:[n|_],_],18,lex). 
nonchain_rule([_,syn:[n|_],_],19,lex). 
nonchain_rule([_,syn:[n|_],_],20,lex). 
nonchain_rule([_,syn:[n|_],_],21,lex). 
nonchain_rule([_,syn:[n|_],_],22,lex). 
nonchain_rule([_,syn:[n|_],_],23,lex). 

nonchain_rule([_,syn:[pn|_],_],24,lex). 
nonchain_rule([_,syn:[pn|_],_],25,lex). 
nonchain_rule([_,syn:[pn|_],_],26,lex). 
nonchain_rule([_,syn:[pn|_],_],27,lex). 

nonchain_rule([_,syn:[v|_],_],28,lex). 
nonchain_rule([_,syn:[v|_],_],29,lex). 
nonchain_rule([_,syn:[v|_],_],30,lex). 
nonchain_rule([_,syn:[v|_],_],31,lex). 
nonchain_rule([_,syn:[v|_],_],32,lex). 
nonchain_rule([_,syn:[v|_],_],33,lex). 
nonchain_rule([_,syn:[v|_],_],34,lex). 
nonchain_rule([_,syn:[v|_],_],35,lex). 
nonchain_rule([_,syn:[v|_],_],36,lex). 
nonchain_rule([_,syn:[v|_],_],37,lex). 
nonchain_rule([_,syn:[v|_],_],38,lex). 
nonchain_rule([_,syn:[v|_],_],39,lex). 
nonchain_rule([_,syn:[v|_],_],40,lex). 

% for append in grammar.pl
nonchain_rule((_,_,_),41,lex).  
nonchain_rule((_,_,_),42,rule).