Halle writes (p. 2):
"In Mangyarrayi the plural is signaled
by repeating the substgring beginning with the vowel of the first
syllable and ending with the consonant(s) preceding the vowel of the
second syllable. In Agta the plural is signaled by repeating the
substring that starts at the beginning of the word and ends with
the consonant that follows the first vowel of the word."
In Halle's analysis, the plural morpheme has no phonetic substance but
it "
triggers Readjustment rules which
insert square bracket junctures
into the underlying junctureless segment sequence of the stems when
these are in construction with a Plural morpheme." For example,
in Agta the underlying singular form
pusa
becomes
[pus]a. Actually
Halle does not insert the square brackets into the phonological string
but rather into the timing units that they correspond to in one-to-one
fashion. This difference is of no practical consequence here. The
bracketed substring is rewritten by the following relinearization rule:
X1 [X2 ... Xn-1] Xn >>> X1 X2 ... Xn-1 X2 ... Xn-1 Xn
that reduplicates the bracketed substring and removes the brackets.
It is obvious that Halle's analysis of Agta reduplication can be
implemented in a finite-state system such as
xfst that has a
compile-replace function. In
xfst terms, what Halle's
Readjustment rule needs to do is to wrap the string that will undergo
reduplication in between a pair of brackets followed by the
reduplication operator
^2. There is
no need for a special relinearization rule. A call to
'compile-replace'
will do the job.
The script below illustrates the Agta case.
# -*- coding:
iso-8859-1 -*-
#
AgtaReduplication.script
define C
[b|c|d|f|g|h|j|k|l|m|n|p|q|r|s|t|v|w|x|y|z];
define V
[a|e|i|o|u];
define RED {^2};
define START "^[";
define PLURAL ?* "+Pl";
define Agta
0:"^["
[{pusa}|{kaldin}|{jyanitor}|{takki}|{uffu}|{bari}]
["+Pl" | "+Sg":0]
0:"^]";
define
DeletePl "+Pl" -> 0;
define
AgtaRedup C* V C @-> "[" ... "]" RED ||
START _ PLURAL ;
regex Agta .o.
AgtaRedup .o. DeletePl;
set retokenize
off
compile-replace
lower
print
lower-words
#####################################################################
Note that we define Agta lexicon with an initial
^[ and final
^] on
the lower-side in anticipation of the call to
'compile-replace'
later on. The
+Sg
marker is mapped directly to an epsilon but the
+Pl marker
is preserved so that we can use it as a context in the
AgtaRedup rule.
AgtaRedup
wraps the substring up to the first consonant after the first vowel
into square brackets and adds the reduplication operator. The
regex line
applies
AgtaRedup
to the lexicon and deletes the
+Pl
marker now that it has had its effect. At this point, the network
contains paths such as
t a k k i +Pl
^[ [ t a k ] ^ 2 k
i ^]
Because of the way we have reached this point, it is necessary to do '
set retokenize off'
to prevent the compiler from turning the lower-side symbols into a
string and retokenizing it. (This would fail because the special
symbols,
^[
and
^],
would need to be in double quotes.)
Finally, the command
'compile-replace
lower' replaces all the expressions on the lower side of the
network. This operation has no effect on the singular forms but the
plural forms reduplicate the bracketed string suffixed by the
^2 operator.
The path above will be replaced by the path
t a
k k i +Pl
t a k t a k k i
and the
'print-lower
words' command
prints the singular and plural forms of the six Agta words:
uffu
ufuffu
takki
taktakki
pusa
puspusa
kaldin
kalkaldin
jyanitor
jyanjyanitor
bari
barbari
The Task
Using the above Agta reduplication
script as the model, write a script for Mangyarrayi reduplication.