Commit e5c81a13f6d4bd867a92c7e9d7f7c02fa09e72a0

Authored by Wojciech Jaworski
1 parent a1931d44

oznaczanie kierunku implikacji

LCGlexicon/ENIAM_LCGlexicon.ml
... ... @@ -152,55 +152,6 @@ let make_quantification e rules =
152 152 let syntax = if bracket then ENIAM_LCGtypes.Bracket(true,true,syntax) else ENIAM_LCGtypes.Bracket(false,false,syntax) in
153 153 cats,syntax,semantics)
154 154  
155   -(***
156   -type rule2 =
157   - Basic of string
158   - | Quant of (selector * string) list * string
159   - | Raised of (selector * string) list * string * selector list
160   - | Quot of (selector * string) list * string
161   - | Inclusion of string
162   - | Conj of (selector * string) list * string
163   - | Bracket of string
164   -
165   -
166   -
167   -let parse_quants_range quant =
168   - Xlist.map quant (fun (cats,v) -> cats, parse_quant_range (cats,v))
169   -(**
170   - let parse_rule categories = function
171   - Basic syntax ->
172   - let quant = parse_quants_range categories in
173   - false, quant, parse_syntax syntax, BasicSem(Xlist.map quant fst)
174   - | Quant(quant,syntax) ->
175   - let quant = parse_quants_range (merge_quant categories quant) in
176   - false, quant, parse_syntax syntax, BasicSem(Xlist.map quant fst)
177   - | Raised(quant,syntax,semantics) ->
178   - let quant = parse_quants_range (merge_quant categories quant) in
179   - false, quant, parse_syntax syntax, RaisedSem(Xlist.map quant fst,semantics)
180   - | Quot(quant,syntax) ->
181   - let quant = parse_quants_range (merge_quant categories quant) in
182   - false, quant, parse_syntax syntax, QuotSem(Xlist.map quant fst)
183   - | Inclusion syntax ->
184   - let quant = parse_quants_range categories in
185   - false, quant, parse_syntax syntax, InclusionSem(Xlist.map quant fst)
186   - | Conj(quant,syntax) ->
187   - let quant = parse_quants_range (merge_quant categories quant) in
188   - false, quant, parse_syntax syntax, ConjSem(Xlist.map quant fst)
189   - | Bracket syntax ->
190   - let quant = parse_quants_range categories in
191   - true, quant, parse_syntax syntax, BasicSem(Xlist.map quant fst)
192   -
193   - let parse_grammar grammar =
194   - List.rev (Xlist.fold grammar [] (fun grammar (selectors,rule,weight) ->
195   - let selectors = parse_selectors selectors in
196   - let pos = find_selector Pos selectors in
197   - let categories =
198   - try StringMap.find pos_categories pos
199   - with Not_found -> failwith ("parse_grammar: " ^ pos) in
200   - let rule = try parse_rule categories rule with Not_found -> failwith ("parse_grammar: " ) in
201   - (selectors,rule,weight) :: grammar))
202   - **)
203   -
204 155 (* let translate_negation = function
205 156 (Negation:negation) -> ["neg"]
206 157 | Aff -> ["aff"]
... ... @@ -231,8 +182,8 @@ let parse_quants_range quant =
231 182 | GerAtrs(m,le,neg,a) -> [Negation,Eq,translate_negation neg;Aspect,Eq,translate_aspect a]
232 183 | NonPersAtrs(m,le,role,role_attr,neg,a) -> [Negation,Eq,translate_negation neg;Aspect,Eq,translate_aspect a]
233 184 | ComprepAtrs _ -> failwith "apply_valence_selectors" *)
234   - ***)
235   -(* FIXME: argumenty X i raised i inne *)
  185 +
  186 +(* FIXME: argumenty X *)
236 187  
237 188 (* let render_schema schema =
238 189 Xlist.map schema (function
... ... @@ -253,11 +204,12 @@ let parse_quants_range quant =
253 204 | _ -> l)
254 205 else (cats,(bracket,quant,syntax,semantics),weight) :: l) *)
255 206  
256   -(* FIXME: ustawienie wartoล›ci symbol *)
257 207 (* FIXME: problem z atrybutami przy zamianie kolejnoล›ci rzฤ™dnikรณw *)
258 208 let make_node id orth lemma pos syntax weight cat_list is_raised =
259   - let attrs = Xlist.fold cat_list(*Xlist.rev_map quant fst*) [] (fun attrs -> function
  209 + let attrs = Xlist.fold cat_list [] (fun attrs -> function
260 210 | Lemma -> attrs
  211 + | Pos -> attrs
  212 + | Pos2 -> attrs
261 213 | Cat -> ("CAT",SubstVar "cat") :: attrs
262 214 | Number -> ("NUM",SubstVar "number") :: attrs
263 215 | Case -> ("CASE",SubstVar "case") :: attrs
... ... @@ -273,7 +225,16 @@ let make_node id orth lemma pos syntax weight cat_list is_raised =
273 225 | Nsyn -> ("NSYN", SubstVar "nsyn") :: attrs
274 226 | Nsem -> ("NSEM", SubstVar "nsem") :: attrs
275 227 | Ctype -> ("CTYPE", SubstVar "ctype") :: attrs
276   - | s -> (string_of_selector s, Dot) :: attrs) in
  228 + | Inumber -> attrs
  229 + | Igender -> attrs
  230 + | Iperson -> attrs
  231 + | Nperson -> attrs
  232 + | Plemma -> attrs
  233 + | Unumber -> attrs
  234 + | Ucase -> attrs
  235 + | Ugender -> attrs
  236 + | Uperson -> attrs) in
  237 + (* | s -> (string_of_selector s, Dot) :: attrs) in *)
277 238 (* | "lex" -> ("LEX",Val "+") :: attrs *)
278 239 (* | s -> failwith ("make_node: " ^ (string_of_selector s))) in *)
279 240 let symbol = if is_raised then
... ...
LCGlexicon/resources/lexicon-pl.dic
... ... @@ -137,13 +137,13 @@ pos=adv: advp{schema}{\(1+qub),/(1+inclusion)}{\(1+adja)};
137 137 # FIXME: dwa znaczenia jak: pytanie o cechฤ™ lub spรณjnik
138 138 lemma=jak|skฤ…d|dokฤ…d|gdzie|ktรณrฤ™dy|kiedy,pos=adv:
139 139 QUANT[inumber=0,igender=0,iperson=0,ctype=int&rel] RAISED[ctype]
140   - cp*ctype*lemma{\(1+advp),/(ip*inumber*igender*iperson/advp)}; #["CTYPE",SubstVar "ctype"]
  140 + cp*ctype*lemma{\(1+advp),/(ip*inumber*igender*iperson/advp)};
141 141 lemma=odkฤ…d|dlaczego|czemu,pos=adv:
142 142 QUANT[inumber=0,igender=0,iperson=0,ctype=int] RAISED[ctype]
143   - cp*ctype*lemma{\(1+advp),/(ip*inumber*igender*iperson/advp)}; #["CTYPE",SubstVar "ctype"]
  143 + cp*ctype*lemma{\(1+advp),/(ip*inumber*igender*iperson/advp)};
144 144 lemma=gdy,pos=adv:
145 145 QUANT[inumber=0,igender=0,iperson=0,ctype=sub] RAISED[ctype]
146   - cp*ctype*lemma{\(1+advp),/(ip*inumber*igender*iperson/advp)}; #["CTYPE",SubstVar "ctype"]
  146 + cp*ctype*lemma{\(1+advp),/(ip*inumber*igender*iperson/advp)};
147 147  
148 148 # czasowniki
149 149 pos=ger: np*number*case*gender*person{schema}{\(1+qub),/(1+inclusion)};
... ... @@ -195,42 +195,50 @@ pos=pant,negation=neg: padvp{schema}{\(1+qub),/(1+inclusion)}{\nie};
195 195  
196 196 pos=comp: QUANT[ctype=sub] cp*ctype*lemma/ip*T*T*T;
197 197 pos=conj: QUANT[ctype=coord] cp*ctype*lemma/ip*T*T*T;
198   -#lemma=i|lub|czy|bฤ…dลบ,pos=conj: Conj([number=all_numbers,gender=all_genders,person=all_persons],"(ip*number*gender*person/ip*T*T*T)\ip*T*T*T"),0.;
199   -#lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: Conj([],"(advp/prepnp*T*T)\prepnp*T*T"),0.;
200   -#lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: Conj([],"(advp/advp)\prepnp*T*T"),0.;
201   -#lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: Conj([],"(advp/prepnp*T*T)\advp"),0.;
202   -#lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: Conj([],"(advp/advp)\advp"),0.;
203   -#lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: Conj([plemma=0,case=all_cases],"(prepnp*plemma*case/prepnp*plemma*case)\prepnp*plemma*case"),0.;
204   -#lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: Conj([number=all_numbers,case=all_cases,gender=all_genders,person=all_persons],"(np*number*case*gender*person/np*T*case*T*T)\np*T*case*T*T"),0.;
205   -#lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: Conj([number=all_numbers,case=all_cases,gender=all_genders],"(adjp*number*case*gender/adjp*number*case*gender)\adjp*number*case*gender"),0.;
  198 +lemma=i|lub|czy|bฤ…dลบ,pos=conj:
  199 + QUANT[number=all_numbers,gender=all_genders,person=all_persons]
  200 + (ip*number*gender*person/ip*T*T*T)\ip*T*T*T;
  201 +lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: (advp/prepnp*T*T)\prepnp*T*T;
  202 +lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: (advp/advp)\prepnp*T*T;
  203 +lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: (advp/prepnp*T*T)\advp;
  204 +lemma=,|i|lub|czy|bฤ…dลบ,pos=conj: (advp/advp)\advp;
  205 +lemma=,|i|lub|czy|bฤ…dลบ,pos=conj:
  206 + QUANT[plemma=0,case=all_cases]
  207 + (prepnp*plemma*case/prepnp*plemma*case)\prepnp*plemma*case;
  208 +lemma=,|i|lub|czy|bฤ…dลบ,pos=conj:
  209 + QUANT[number=all_numbers,case=all_cases,gender=all_genders,person=all_persons]
  210 + (np*number*case*gender*person/np*T*case*T*T)\np*T*case*T*T;
  211 +lemma=,|i|lub|czy|bฤ…dลบ,pos=conj:
  212 + QUANT[number=all_numbers,case=all_cases,gender=all_genders]
  213 + (adjp*number*case*gender/adjp*number*case*gender)\adjp*number*case*gender;
206 214  
207 215 lemma=co|kto,pos=subst:
208 216 QUANT[inumber=0,igender=0,iperson=0,ctype=int&rel,number=T,case=T,gender=T,person=ter] RAISED[ctype]
209   - cp*ctype*lemma/(ip*inumber*igender*iperson/np*number*case*gender*person); #["CTYPE",SubstVar "ctype"]
  217 + cp*ctype*lemma/(ip*inumber*igender*iperson/np*number*case*gender*person);
210 218 lemma=co|kto,pos=subst:
211 219 QUANT[inumber=0,igender=0,iperson=0,plemma=0,ctype=int&rel,number=T,case=T,gender=T,person=ter] RAISED[ctype]
212   - cp*ctype*lemma{/(ip*inumber*igender*iperson/prepnp*plemma*case),/(prepnp*plemma*case/np*number*case*gender*person)}; #["CTYPE",SubstVar "ctype"]
  220 + cp*ctype*lemma{/(ip*inumber*igender*iperson/prepnp*plemma*case),/(prepnp*plemma*case/np*number*case*gender*person)};
213 221 lemma=to,pos=subst:
214 222 QUANT[ctype=0,plemma=0,number=T,case=T,gender=T,person=ter]
215 223 ncp*number*case*gender*person*ctype*plemma{\(1+qub),/(1+inclusion)}{/cp*ctype*plemma};
216 224 pos=ppron3,praep=praep:
217 225 QUANT[plemma=0,number=T,case=T,gender=T,person=T] RAISED[]
218   - prepnp*plemma*case\(prepnp*plemma*case/np*number*case*gender*person); #inclusion #[Number;Case;Gender;Person];
  226 + prepnp*plemma*case\(prepnp*plemma*case/np*number*case*gender*person); #inclusion #[Number;Case;Gender;Person]; #FIXME: semantyka
219 227 lemma=ile,pos=num: # FIXME: iloma ma bezpoล›redni podrzฤ™dnik rzeczownikowy, a ile nie # FIXME: mwe "o ile, na ile"
220 228 QUANT[inumber=0,igender=0,iperson=0,ctype=int&rel,number=T,case=T,gender=T,person=ter]
221   - cp*ctype*lemma/ip*inumber*igender*iperson; # FIXME: zaล›lepka, bo podrzฤ™dnik ile nie musi z nim sฤ…ciadowaฤ‡ #["CTYPE",SubstVar "ctype"] # FIXME: trzeba dodaฤ‡ przypadki, bezpoล›redniego podrzฤ™dnika rzeczownikowego i przyimka nad "ile"
  229 + cp*ctype*lemma/ip*inumber*igender*iperson; # FIXME: zaล›lepka, bo podrzฤ™dnik ile nie musi z nim sฤ…ciadowaฤ‡ # FIXME: trzeba dodaฤ‡ przypadki, bezpoล›redniego podrzฤ™dnika rzeczownikowego i przyimka nad "ile"
222 230 lemma=czyj|jaki|ktรณry,pos=apron:
223 231 QUANT[inumber=0,igender=0,iperson=0,nperson=0,ctype=int,number=T,case=T,gender=T] RAISED[ctype]
224   - cp*ctype*lemma{/(ip*inumber*igender*iperson/np*number*case*gender*nperson)}{/(np*number*case*gender*nperson\adjp*number*case*gender)}; #["CTYPE",SubstVar "ctype"]
  232 + cp*ctype*lemma{/(ip*inumber*igender*iperson/np*number*case*gender*nperson)}{/(np*number*case*gender*nperson\adjp*number*case*gender)};
225 233 lemma=czyj|jaki|ktรณry,pos=apron:
226 234 QUANT[inumber=0,igender=0,iperson=0,nperson=0,plemma=0,ctype=int,number=T,case=T,gender=T] RAISED[ctype]
227   - cp*ctype*lemma{/(ip*inumber*igender*iperson/prepnp*plemma*case)}{/(prepnp*plemma*case/np*number*case*gender*nperson)}{/(np*number*case*gender*nperson\adjp*number*case*gender)}; #["CTYPE",SubstVar "ctype"]
  235 + cp*ctype*lemma{/(ip*inumber*igender*iperson/prepnp*plemma*case)}{/(prepnp*plemma*case/np*number*case*gender*nperson)}{/(np*number*case*gender*nperson\adjp*number*case*gender)};
228 236 lemma=czyj|jaki,pos=apron:
229 237 QUANT[inumber=0,igender=0,iperson=0,ctype=rel,number=T,case=T,gender=T,person=ter] RAISED[ctype]
230   - cp*ctype*lemma/(ip*inumber*igender*iperson/np*number*case*gender*person); #["CTYPE",SubstVar "ctype"]
  238 + cp*ctype*lemma/(ip*inumber*igender*iperson/np*number*case*gender*person);
231 239 lemma=jaki|ktรณry,pos=apron:
232 240 QUANT[inumber=0,igender=0,iperson=0,plemma=0,ctype=rel,number=T,case=T,gender=T,person=ter] RAISED[ctype]
233   - cp*ctype*lemma{/(ip*inumber*igender*iperson/prepnp*plemma*case)}{/(prepnp*plemma*case/np*number*case*gender*person)}; #["CTYPE",SubstVar "ctype"]
  241 + cp*ctype*lemma{/(ip*inumber*igender*iperson/prepnp*plemma*case)}{/(prepnp*plemma*case/np*number*case*gender*person)};
234 242  
235 243 lemma=siฤ™,pos=qub: siฤ™; # FIXME: dodaฤ‡ make_np
236 244 lemma=nie,pos=qub: nie;
... ... @@ -245,14 +253,14 @@ pos=qub: qub;
245 253 pos=interj: interj;
246 254 lemma=-,pos=interp: hyphen;
247 255 lemma=?,pos=interp: int;
248   -#lemma=โ€ž,pos=interp: Quot([number=0,case=0,gender=0,person=0],"(np*number*case*gender*person/rquot)/np*number*case*gender*person"),0.;
249   -#lemma=ยซ,pos=interp: Quot([number=0,case=0,gender=0,person=0],"(np*number*case*gender*person/rquot2)/np*number*case*gender*person"),0.;
250   -#lemma=ยป,pos=interp: Quot([number=0,case=0,gender=0,person=0],"(np*number*case*gender*person/rquot3)/np*number*case*gender*person"),0.;
  256 +lemma=โ€ž,pos=interp: QUANT[number=0,case=0,gender=0,person=0] (np*number*case*gender*person/rquot)/np*number*case*gender*person; #SetAttr("QUOT",Val "+",Var "x"
  257 +lemma=ยซ,pos=interp: QUANT[number=0,case=0,gender=0,person=0] (np*number*case*gender*person/rquot2)/np*number*case*gender*person; #SetAttr("QUOT",Val "+",Var "x"
  258 +lemma=ยป,pos=interp: QUANT[number=0,case=0,gender=0,person=0] (np*number*case*gender*person/rquot3)/np*number*case*gender*person; #SetAttr("QUOT",Val "+",Var "x"
251 259 lemma=โ€,pos=interp: rquot;
252 260 lemma=ยป,pos=interp: rquot2;
253 261 lemma=ยซ,pos=interp: rquot3;
254   -#lemma=(,pos=interp: Inclusion "(inclusion/rparen)/(np*T*T*T*T+ip*T*T*T+adjp*T*T*T+prepnp*T*T);
255   -#lemma=[,pos=interp: Inclusion "(inclusion/rparen2)/(np*T*T*T*T+ip*T*T*T+adjp*T*T*T+prepnp*T*T);
  262 +lemma=(,pos=interp: (inclusion/rparen)/(np*T*T*T*T+ip*T*T*T+adjp*T*T*T+prepnp*T*T); #SetAttr("INCLUSION",Val "+",
  263 +lemma=[,pos=interp: (inclusion/rparen2)/(np*T*T*T*T+ip*T*T*T+adjp*T*T*T+prepnp*T*T); #SetAttr("INCLUSION",Val "+",
256 264 lemma=),pos=interp: rparen;
257 265 lemma=],pos=interp: rparen2;
258 266 pos=unk: np*number*case*gender*person;
... ... @@ -273,7 +281,7 @@ lemma=:,pos=interp: BRACKET or;
273 281 lemma=:s,pos=interp: BRACKET <colon>\<speaker>;
274 282 lemma=:s,pos=interp: BRACKET (<colon>\<speaker>)/<squery>;
275 283 lemma=<or-sentence>,pos=interp: BRACKET <root>/s;
276   -lemma=<or-sentence>,pos=interp: BRACKET ((<root>/<speaker-end>)/(ip*T*T*T/or))/or2;
  284 +lemma=<or-sentence>,pos=interp: BRACKET ((<root>/<speaker-end>)/(ip*T*T*T/or))/or2; #FIXME: semantyka
277 285 lemma=</or-sentence>,pos=interp: BRACKET or2\?(ip*T*T*T+cp*int*T+np*sg*voc*T*T+interj);
278 286 lemma=<sentence>,pos=interp: BRACKET (<speaker>/<speaker-end>)/np*T*nom*T*T;
279 287 lemma=</sentence>,pos=interp: BRACKET <speaker-end>;
... ...
LCGlexicon/test.ml
... ... @@ -43,7 +43,7 @@ let examples = [
43 43 8, 5, 6, "","</clause>","interp", [],false;
44 44 9, 6, 7, ".","</sentence>","interp", [],false;
45 45 ],7;*)
46   - "jaki",[
  46 + (* "jaki",[
47 47 1, 0, 1, "","<sentence>","interp", [],false;
48 48 2, 1, 2, "","<clause>","interp", [],false;
49 49 3, 2, 3, "Jakiego","jaki","adj", [["sg"];["gen";"acc"];["m1";"m2"];["pos"]],false;
... ... @@ -53,7 +53,29 @@ let examples = [
53 53 7, 6, 7, "?","?","interp", [],false;
54 54 8, 7, 8, "","</clause>","interp", [],false;
55 55 9, 8, 9, ".","</sentence>","interp", [],false;
56   - ],9;
  56 + ],9; *)
  57 + (*"kot_i_pies",[
  58 + 1, 0, 1, "","<sentence>","interp", [],false;
  59 + 2, 1, 2, "","<clause>","interp", [],false;
  60 + 3, 2, 3, "Ala","Ala","subst", [["sg"];["nom"];["f"]],true;
  61 + 4, 3, 4, "ma","mieฤ‡","fin", [["sg"];["ter"];["imperf"]],false;
  62 + 5, 4, 5, "kota","kot","subst", [["sg"];["gen";"acc"];["m1";"m2"]],false;
  63 + 6, 5, 6, "i","i","conj", [],false;
  64 + 7, 6, 7, "psa","pies","subst", [["sg"];["gen";"acc"];["m2"]],false;
  65 + 8, 7, 8, "","</clause>","interp", [],false;
  66 + 9, 8, 9, ".","</sentence>","interp", [],false;
  67 + ],9;*)
  68 +"kotx",[
  69 + 1, 0, 1, "","<sentence>","interp", [],false;
  70 + 2, 1, 2, "","<clause>","interp", [],false;
  71 + 3, 2, 3, "Ala","Ala","subst", [["sg"];["nom"];["f"]],true;
  72 + 4, 3, 4, "ma","mieฤ‡","fin", [["sg"];["ter"];["imperf"]],false;
  73 + 5, 4, 5, "โ€ž","โ€ž","interp", [],false;
  74 + 6, 5, 6, "kota","kot","subst", [["sg"];["gen";"acc"];["m1";"m2"]],false;
  75 + 7, 6, 7, "โ€","โ€","interp", [],false;
  76 + 8, 7, 8, "","</clause>","interp", [],false;
  77 + 9, 8, 9, ".","</sentence>","interp", [],false;
  78 +],9;
57 79 ]
58 80  
59 81 let valence = [
... ... @@ -64,6 +86,7 @@ let valence = [
64 86 Both,Plus[One;Tensor[Atom "np";Top;Atom "gen";Top;Top]]];
65 87 [Lemma,Eq,["kot"];Pos,Eq,["subst"]],[Both,Plus[One;Tensor[Atom "adjp";AVar "number";AVar "case";AVar "gender"]]];
66 88 [Lemma,Eq,["kota"];Pos,Eq,["subst"]],[];
  89 + [Lemma,Eq,["pies"];Pos,Eq,["subst"]],[];
67 90 ]
68 91  
69 92 let create_chart valence tokens last =
... ...
LCGparser/ENIAM_LCGgraphOf.ml
... ... @@ -30,7 +30,7 @@ let escape_string s =
30 30 let string_of_node t =
31 31 let l = [
32 32 "ORTH",Val t.orth;"LEMMA",Val t.lemma;"POS",Val t.pos;"ID",Val (string_of_int t.id);"WEIGHT",Val (string_of_float t.weight);
33   - "SYMBOL",t.symbol;"ARG_SYMBOL",t.arg_symbol] @ t.attrs in
  33 + "SYMBOL",t.symbol;"ARG_SYMBOL",t.arg_symbol;"ARG_DIR",Val t.arg_dir] @ t.attrs in
34 34 "{ " ^ String.concat " | " (Xlist.map l (fun (e,t) -> "{ " ^ e ^ " | " ^ escape_string (ENIAM_LCGstringOf.linear_term 0 t) ^ " }")) ^ " }"
35 35  
36 36  
... ...
LCGparser/ENIAM_LCGlatexOf.ml
... ... @@ -73,7 +73,7 @@ let rec linear_term c = function
73 73 "{\\left[\\begin{array}{ll}" ^
74 74 (String.concat "\\\\ " (Xlist.map (["ORTH",Val t.orth;"LEMMA",Val t.lemma;"POS",Val t.pos;"ID",Val (string_of_int t.id);
75 75 "WEIGHT",Val (string_of_float t.weight);"SYMBOL",t.symbol;
76   - "ARG_SYMBOL",t.arg_symbol;"ARGS",t.args] @ t.attrs) (fun (e,t) ->
  76 + "ARG_SYMBOL",t.arg_symbol;"ARG_DIR",Val t.arg_dir;"ARGS",t.args] @ t.attrs) (fun (e,t) ->
77 77 "\\text{" ^ (Xlatex.escape_string e) ^ "} & " ^ (linear_term 0 t)))) ^ "\\end{array}\\right]}"
78 78 (* | Morf m -> "\\text{" ^ Xlatex.escape_string (ENIAMwalStringOf.morf m) ^ "}"
79 79 | Gf s -> "\\text{" ^ Xlatex.escape_string (ENIAMwalStringOf.gf s) ^ "}" *)
... ...
LCGparser/ENIAM_LCGreductions.ml
... ... @@ -226,6 +226,7 @@ let linear_term_beta_reduction4 references =
226 226 | "MORF",Morf morf -> Node{t with amorf=morf}
227 227 | "AROLE",Val arole -> Node{t with arole=arole} *)
228 228 | "ARG_SYMBOL",symbol -> Node{t with arg_symbol=symbol}
  229 + | "ARG_DIR",Val dir -> Node{t with arg_dir=dir}
229 230 | _ -> Node{t with attrs=(e,linear_term_beta_reduction subst s) :: t.attrs})
230 231 | Variant(e2,l) -> Variant(e2,Xlist.map l (fun (i,t) -> i,linear_term_beta_reduction subst (SetAttr(e,s,t))))
231 232 | t -> SetAttr(e,s,t))
... ...
LCGparser/ENIAM_LCGrenderer.ml
... ... @@ -95,7 +95,7 @@ let rec substitute_substvar v g = function
95 95  
96 96  
97 97 let empty_node = {
98   - orth=""; lemma=""; pos=""; weight=0.; id=0; symbol=Dot; arg_symbol=Dot; attrs=[]; args=Dot;}
  98 + orth=""; lemma=""; pos=""; weight=0.; id=0; symbol=Dot; arg_symbol=Dot; arg_dir=""; attrs=[]; args=Dot;}
99 99  
100 100 let variable_num_ref = ref 0
101 101  
... ... @@ -126,13 +126,21 @@ let make_arg_symbol l =
126 126 | Top -> Val "T"
127 127 | _ -> failwith "make_arg_symbol"))
128 128  
129   -let rec make_term_arg = function
130   - Tensor l -> let v = get_variable_name () in v, Cut(SetAttr("ARG_SYMBOL",make_arg_symbol l,Var v))
131   - | Plus l -> let v = get_variable_name () in v, Case(Var v,Xlist.map l make_term_arg)
  129 +let string_of_direction = function
  130 + Forward -> "forward"
  131 + | Backward -> "backward"
  132 + | Both -> "both"
  133 +
  134 +let rec make_term_arg dir = function
  135 + Tensor l ->
  136 + let v = get_variable_name () in
  137 + v, Cut(SetAttr("ARG_DIR",Val (string_of_direction dir),
  138 + SetAttr("ARG_SYMBOL",make_arg_symbol l,Var v)))
  139 + | Plus l -> let v = get_variable_name () in v, Case(Var v,Xlist.map l (make_term_arg dir))
132 140 (* | Imp(s,d,t2) -> *)
133 141 | One -> get_variable_name (), Dot
134 142 | Maybe s ->
135   - let v,arg = make_term_arg s in
  143 + let v,arg = make_term_arg dir s in
136 144 let w = get_variable_name () in
137 145 w, Fix(Var w,Lambda(v,arg))
138 146 | _ -> failwith "make_term_arg"
... ... @@ -165,11 +173,11 @@ let is_raised = function
165 173 let rec make_term_imp node outer_node = function
166 174 | Imp(s,d,t2) ->
167 175 if is_raised [d,t2] then make_raised_term_imp (Node node) outer_node Dot (Imp(s,d,t2)) else
168   - let v,arg = make_term_arg t2 in
  176 + let v,arg = make_term_arg d t2 in
169 177 Lambda(v,make_term_imp (add_args node [arg]) outer_node s)
170 178 | ImpSet(s,l) ->
171 179 if is_raised l then make_raised_term_imp (Node node) outer_node Dot (ImpSet(s,l)) else
172   - let vars,args = List.split (Xlist.map l (fun (_,t) -> make_term_arg t)) in
  180 + let vars,args = List.split (Xlist.map l (fun (d,t) -> make_term_arg d t)) in
173 181 LambdaSet(vars,make_term_imp (add_args node args) outer_node s)
174 182 | Tensor l -> Node node
175 183 | _ -> failwith "make_term_imp"
... ...
LCGparser/ENIAM_LCGstringOf.ml
... ... @@ -56,7 +56,7 @@ let rec linear_term c = function
56 56 "[" ^
57 57 (String.concat "; " (Xlist.map (["ORTH",Val t.orth;"LEMMA",Val t.lemma;"POS",Val t.pos;"ID",Val (string_of_int t.id);
58 58 "WEIGHT",Val (string_of_float t.weight);"SYMBOL",t.symbol;
59   - "ARG_SYMBOL",t.arg_symbol;"ARGS",t.args] @ t.attrs) (fun (e,t) ->
  59 + "ARG_SYMBOL",t.arg_symbol;"ARG_DIR",Val t.arg_dir;"ARGS",t.args] @ t.attrs) (fun (e,t) ->
60 60 e ^ ": " ^ (linear_term 0 t)))) ^ "]"
61 61 (* | Morf m -> ENIAMwalStringOf.morf m
62 62 | Gf s -> ENIAMwalStringOf.gf s*)
... ...
LCGparser/ENIAM_LCGtypes.ml
... ... @@ -31,6 +31,7 @@ type node = {
31 31 id: int;
32 32 symbol: linear_term;
33 33 arg_symbol: linear_term;
  34 + arg_dir: string;
34 35 (*agf: ENIAMwalTypes.gf;
35 36 amorf: ENIAMwalTypes.morf;
36 37 arole: string;
... ...