-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwordorder.lil
More file actions
80 lines (71 loc) · 2.8 KB
/
Copy pathwordorder.lil
File metadata and controls
80 lines (71 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
:- module("wordorder").
:- module_interface.
:- ensure_loaded("types").
word_order <- [pred].
:- module_implementation.
or <- [pred].
or(minus, minus, minus) :- !.
or(_, _, plus).
word_order_rule <- [pred].
% skip over proclitics (don't count as words)
word_order_rule(WO_CLITIC\proclitic, $right, $right) :-
!
, printAVM(" WO: procl + X = X")
.
% nonenclitics combine
word_order_rule(
WO_CLITIC\nonenclitic & WO_CBLOCK\no_cb & WO_PREDICATIVE\$predleft,
WO_CLITIC\nonenclitic & WO_CBLOCK\no_cb & WO_PREDICATIVE\$predright,
WO_CLITIC\nonclitic & WO_CBLOCK\no_cb & WO_MULTIWORD\plus & WO_PREDICATIVE\$pred & WO_CANFOCUS\plus
) :-
or($predleft, $predright, $pred)
, print(" WO: no + no = no")
.
% enclitics enter clitic block
word_order_rule(
WO_CBLOCK\combinable_cb & WO_MULTIWORD\$multi & WO_PREDICATIVE\$pred & WO_CANFOCUS\$focus,
WO_CLITIC\enclitic,
WO_CLITIC\nonclitic & WO_CBLOCK\in_cb & WO_MULTIWORD\$multi & WO_PREDICATIVE\$pred & WO_CANFOCUS\$focus
) :-
($pred = minus; $multi = minus)
, print(" WO: in/no + encl = in")
.
% single word current host + anything => finished host
word_order_rule(
WO_MULTIWORD\minus & WO_CBLOCK\in_cb & WO_PREDICATIVE\$predleft & WO_CANFOCUS\$focus,
WO_CBLOCK\no_cb & WO_PREDICATIVE\$predright,
WO_CLITIC\nonclitic & WO_CBLOCK\done_cb & WO_MULTIWORD\plus & WO_PREDICATIVE\$pred & WO_CANFOCUS\$focus
) :-
or($predleft, $predright, $pred)
, print(" WO: single in + no = done")
.
% multi word current host (not predicate) + anything => finished host
word_order_rule(
WO_MULTIWORD\plus & WO_CBLOCK\in_cb & WO_PREDICATIVE\minus & WO_CANFOCUS\$focus,
WO_CBLOCK\no_cb,
WO_CLITIC\nonclitic & WO_CBLOCK\done_cb & WO_MULTIWORD\plus & WO_PREDICATIVE\plus & WO_CANFOCUS\$focus
) :-
true % DEBUG
, print(" WO: multi in + pred no = done")
.
% finished host + anything => finished host
word_order_rule(
WO_CBLOCK\done_cb & WO_PREDICATIVE\$predleft & WO_CANFOCUS\$focus,
WO_CBLOCK\no_cb & WO_PREDICATIVE\$predright,
WO_CLITIC\nonclitic & WO_CBLOCK\done_cb & WO_MULTIWORD\plus & WO_PREDICATIVE\$pred & WO_CANFOCUS\$focus
) :-
or($predleft, $predright, $pred)
, print(" WO: done + no = done")
.
% anything (nonpredicative) + finished host (that can focus) => finished host (no more focus)
% TODO: left side should be "heavy", not simply multiword...
word_order_rule(
WO_CBLOCK\no_cb & WO_PREDICATIVE\minus & WO_MULTIWORD\plus,
WO_CBLOCK\done_cb & WO_PREDICATIVE\plus & WO_CANFOCUS\plus,
WO_CLITIC\nonclitic & WO_CBLOCK\done_cb & WO_MULTIWORD\plus & WO_PREDICATIVE\plus & WO_CANFOCUS\minus
) :-
true % DEBUG
, print(" WO: focus no + done = done")
.
word_order(WORDORDER\$left, WORDORDER\$right, $mother_wordorder) :- % DEBUG
word_order_rule($left, $right, $mother_wordorder).