2:- module(options,[parseOptions/2,
3 option/2,
4 setOption/3,
5 showOptions/1,
6 setDefaultOptions/1]). 7
8:- use_module(semlib(errors),[error/2,warning/2]). 9:- use_module(library(lists),[member/2]). 10
11
15
16:- dynamic option/2. 17
18
22
23setOption(P,Option,Value):-
24 assertOptions(P,[Option:Value]).
25
26
30
31parseOptions(P,Arg):-
32 opts(P,Options,Arg,[]), !,
33 assertOptions(P,Options),
34 dependentOptions(P).
35
36
40
41opts(_,[]) --> [].
42opts(P,[O:do|L]) --> opt0(P,O), opts(P,L).
43opts(P,[O:V|L]) --> opt1(P,O), value(V), opts(P,L).
44opts(P,[O:true|L]) --> opt1(P,O), {option(P,O,_,true,_)}, opts(P,L).
45opts(P,[O:V|L]) --> opt2(P,O), value(V), opts(P,L).
46opts(P,[O:V|L]) --> opt3(P,O), integer(V), opts(P,L).
47opts(P,[unknownoption:O|L]) --> opt4(P,O), opts(P,L).
48opts(P,[unknownoption:O|L]) --> opt4(P,O), value(_), opts(P,L).
49opts(P,[unknown:V|L]) --> value(V), opts(P,L).
50
51opt0(P,O) --> {option(P,O,0,_,_)}, [O].
52opt1(P,O) --> {option(P,O,1,_,_)}, [O].
53opt2(P,O) --> {option(P,O,-1,_,_)}, [O].
54opt3(P,O) --> {option(P,O,-2,_,_)}, [O].
55opt4(_,O) --> [O], {atom_chars(O,['-','-'|_])}.
56
57value(V) --> [V], {atom_chars(V,[X,Y|_]), \+ (X = '-', Y = '-')}.
58value(V) --> [V], {atom_chars(V,[_])}.
59
60integer(V) --> [Int], {atom_codes(Int,Codes), isInteger(Codes,0,V)}.
61
62
66
67isInteger([],Int,Int):- !.
68
69isInteger([X|L],Old,Int):-
70 X > 47, X < 58, !,
71 New is (Old*10)+(X-48),
72 isInteger(L,New,Int).
73
74
78
79dependentOptions(P):-
80 findall(ifthen(A,B,C,D),dep(P,A,B,C,D),L),
81 dependentOptions(L,P).
82
83dependentOptions([],_):- !.
84
85dependentOptions([ifthen(A,B,C,D)|L],P):-
86 option(A,B), !,
87 setOption(P,C,D),
88 dependentOptions(L,P).
89
90dependentOptions([_|L],P):-
91 dependentOptions(L,P).
92
93
94
98
99assertOptions(_,[]).
100
101assertOptions(P,[Option:do|L]):-
102 option(P,Option,0,_,_), !,
103 retract(option(Option,_)),
104 assert(option(Option,do)),
105 assertOptions(P,L).
106
107assertOptions(P,[Option:Value|L]):-
108 option(P,Option,-1,_,_),
109 atomic(Value), !,
110 retract(option(Option,_)),
111 assert(option(Option,Value)),
112 assertOptions(P,L).
113
114assertOptions(P,[Option:Value|L]):-
115 option(P,Option,-2,_,_),
116 number(Value), !,
117 retract(option(Option,_)),
118 assert(option(Option,Value)),
119 assertOptions(P,L).
120
121assertOptions(P,[Option:Value|L]):-
122 atomic(Value),
123 option(P,Option,1,Value,_), !,
124 retract(option(Option,_)),
125 assert(option(Option,Value)),
126 assertOptions(P,L).
127
128assertOptions(P,[unknownoption:Option|L]):- !,
129 error('option ~p not supported',[Option]),
130 assertOptions(P,L).
131
132assertOptions(P,[unknown:Unknown|L]):- !,
133 error('argument ~p not interpreted',[Unknown]),
134 assertOptions(P,L).
135
136assertOptions(P,[Option:Value|L]):-
137 error('unknown value ~p for option ~p',[Value,Option]), !,
138 assertOptions(P,L).
139
140
144
145setDefaultOptions(P):-
146 retractall(option(_,_)),
147 setof(Op,Ar^Val^Def^option(P,Op,Ar,Val,Def),Options),
148 setDefaultOptions(Options,P).
149
150setDefaultOptions([],_):- !.
151
152setDefaultOptions([X|L],P):-
153 option(P,X,_,_,D), !,
154 assert(option(X,D)),
155 setDefaultOptions(L,P).
156
157
161
162showOptions(P):-
163 ( setof(O,V^D^(option(P,O,0,V,D),format(user_error,' ~w~n',[O])),_), !; true ),
164 ( setof(O,V^D^(option(P,O,-1,V,D),format(user_error,' ~w <file>~n',[O])),_), !; true ),
165 ( setof(O,V^D^(option(P,O,-2,V,D),format(user_error,' ~w <integer> (default: ~p)~n',[O,D])),_), !; true ),
166 ( setof(o(O,D),V^option(P,O,1,V,D),Options), !; true ),
167 findall(_,( member(o(O,D),Options),
168 findall(V,option(P,O,1,V,_),L),
169 format(user_error,' ~w <arg> (possible values: ~w, default: ~w)~n',[O,L,D])),_),
170 nl(user_error).
171
172
176
177option( tokkie, '--help', 0, _, dont ).
178option( tokkie, '--version', 0, _, dont ).
179option( tokkie, '--stdin', 0, _, dont ).
180option( tokkie, '--warnings', 1, V, false ):- member(V,[true,false]).
181option( tokkie, '--language', 1, V, en ):- member(V,[en,it]).
182option( tokkie, '--quotes', 1, V, keep ):- member(V,[keep,delete]).
183option( tokkie, '--mode', 1, V, poor ):- member(V,[poor,iob,rich]).
184option( tokkie, '--format', 1, V, txt ):- member(V,[prolog,txt]).
185option( tokkie, '--input', -1, _, user_input ).
186option( tokkie, '--output', -1, _, user_output).
187
188
192
193option( nutcracker, '--help', 0, _, dont ).
194option( nutcracker, '--version', 0, _, dont ).
195option( nutcracker, '--force', 1, V, false ):- member(V,[true,false]).
196option( nutcracker, '--soap', 1, V, false ):- member(V,[true,false]).
197option( nutcracker, '--modal', 1, V, false ):- member(V,[true,false]).
199option( nutcracker, '--plural', 1, V, false ):- member(V,[true,false]).
200option( nutcracker, '--copula', 1, V, false ):- member(V,[true,false]).
201option( nutcracker, '--resolve', 1, V, true ):- member(V,[true,false]).
202option( nutcracker, '--nn', 1, V, false ):- member(V,[true,false]).
203option( nutcracker, '--x', 1, V, false ):- member(V,[true,false]).
204option( nutcracker, '--wordnet', 1, V, true ):- member(V,[true,false]).
205option( nutcracker, '--warnings', 1, V, false ):- member(V,[true,false]).
206option( nutcracker, '--info', 1, V, false ):- member(V,[true,false]).
207option( nutcracker, '--graph', 1, V, false ):- member(V,[true,false]).
208option( nutcracker, '--contradiction', 1, V, false ):- member(V,[true,false]). 209option( nutcracker, '--wsd', 1, V, false ):- member(V,[true,false]).
210option( nutcracker, '--roles', 1, V, proto ):- member(V,[proto,verbnet]). 211option( nutcracker, '--language', 1, V, en ):- member(V,[en,it]).
212option( nutcracker, '--inference', 1, V, yes ):- member(V,[yes,no,only]).
213option( nutcracker, '--tp', 1, V, bliksem ):- member(V,[vampire,bliksem,otter]).
214option( nutcracker, '--mb', 1, V, mace ):- member(V,[mace,paradox]).
215option( nutcracker, '--mbbis', 1, V, none ):- member(V,[none,mace]).
216option( nutcracker, '--domsize', -2, _, 50 ).
217option( nutcracker, '--timelim', -2, _, 30 ).
218option( nutcracker, '--dir', -1, _, 'working' ).
219option( nutcracker, '--axioms', -1, _, 'none' ).
220
221
225
226option( boxer, '--help', 0, _, dont ).
227option( boxer, '--version', 0, _, dont ).
228option( boxer, '--stdin', 0, _, dont ).
229option( boxer, '--resolve', 1, V, false ):- member(V,[true,false]).
230option( boxer, '--integrate', 1, V, false ):- member(V,[true,false]).
231option( boxer, '--warnings', 1, V, false ):- member(V,[true,false]).
232option( boxer, '--instantiate',1, V, false ):- member(V,[true,false]).
233option( boxer, '--ccg', 1, V, false ):- member(V,[true,false]).
234option( boxer, '--elimeq', 1, V, false ):- member(V,[true,false]).
235option( boxer, '--box', 1, V, false ):- member(V,[true,false]).
237option( boxer, '--nn', 1, V, false ):- member(V,[true,false]).
238option( boxer, '--tense', 1, V, false ):- member(V,[true,false]).
239option( boxer, '--modal', 1, V, false ):- member(V,[true,false]).
240option( boxer, '--plural', 1, V, false ):- member(V,[true,false]).
241option( boxer, '--x', 1, V, false ):- member(V,[true,false]).
242option( boxer, '--copula', 1, V, true ):- member(V,[true,false]).
243option( boxer, '--tokid', 1, V, local ):- member(V,[local,global]).
244option( boxer, '--mwe', 1, V, no ):- member(V,[no,yes,all]).
246option( boxer, '--theory', 1, V, drt ):- member(V,[drt,sdrt]).
247option( boxer, '--roles', 1, V, proto ):- member(V,[proto,verbnet]). 248option( boxer, '--format', 1, V, prolog ):- member(V,[prolog,xml,latex,dot,no]).
249option( boxer, '--semantics', 1, V, drs ):- member(V,[drs,pdrs,fol,drg,amr,tacitus,der]).
250option( boxer, '--input', -1, _, user_input ).
251option( boxer, '--output', -1, _, user_output).
252
253
257
258dep(boxer, '--semantics',amr, '--elimeq',true).
259dep(boxer, '--semantics',amr, '--copula',false).
260dep(boxer, '--semantics',amr, '--modal',true).
261dep(boxer, '--semantics',amr, '--theory',sdrt)