Next: Chorus1, Previous: BarriersLabels, Up: Principles list
principle.csd
D1, D2, D3
NodeLabels: set(label(D2))
NodeLabels: {}
CSD (priority 110)
This principle supports the grammar for cross-serial dependencies
Grammars/CSD.ul (CSD).
It stipulates the constraint that all noun dependents of a node v must follow the noun dependents of the nodes above v.
The NodeLabels argument variable determines the set of labels
for noun dependents, e.g. {n} for Grammars/CSD.ul
(CSD).
Here is the definition of the CSD constraint functor:
%% Copyright 2001-2008
%% by Ralph Debusmann <rade@ps.uni-sb.de> (Saarland University) and
%% Denys Duchier <duchier@ps.uni-sb.de> (LIFO, Orleans) and
%% Jorge Marques Pelizzoni <jpeliz@icmc.usp.br> (ICMC, Sao Paulo) and
%% Jochen Setz <info@jochensetz.de> (Saarland University)
%%
functor
import
% System(show)
Helpers(checkModel) at 'Helpers.ozf'
export
Constraint
define
proc {Constraint Nodes G Principle FD FS Select}
DVA2DIDA = Principle.dVA2DIDA
%%
DIDA = {DVA2DIDA 'D'}
in
if {Helpers.checkModel 'CSD.oz' Nodes
[DIDA#daughtersL
DIDA#mothers]} then
ArgRecProc = Principle.argRecProc
%%
DIDA2LabelLat = G.dIDA2LabelLat
LabelLat = {DIDA2LabelLat DIDA}
LAs = LabelLat.constants
%%
PosMs = {Map Nodes
fun {$ Node} Node.pos end}
in
for Node in Nodes I in 1..{Length Nodes} do
NounLabelsM = {ArgRecProc 'NounLabels' o('_': Node)}
%%
NDaughtersMs =
{Map Nodes
fun {$ Node}
AllDaughtersMs =
{Map LAs
fun {$ LA} Node.DIDA.model.daughtersL.LA end}
in
{Select.union AllDaughtersMs NounLabelsM}
end}
%%
NDaughtersUpM =
{Select.union NDaughtersMs Node.DIDA.model.up}
PosNDaughtersUpM = {Select.union PosMs NDaughtersUpM}
%%
NDaughtersM = {Nth NDaughtersMs I}
PosNDaughtersM = {Select.union PosMs NDaughtersM}
in
{FS.int.seq [PosNDaughtersUpM PosNDaughtersM]}
end
end
end
end