<< Prev | - Up - | Next >> |
Here is a sample grammar, packaged as a functor that exports Lexicon
and Rules
.
functor
export
Lexicon Rules
define
<Lexicon>
<Rules>
end
The lexicon is extremely simple but has nonetheless a number
feature in order to illustrate agreement constraints.
Lex =
lex(
the:
[det #fun {$} det(phon:the number:_) end]
a:
[det #fun {$} det(phon:a number:singular) end]
john:
[np #fun {$} np(phon:john number:singular) end]
man:
[n #fun {$} n(phon:man number:singular) end]
men:
[n #fun {$} n(phon:men number:plural) end]
woman:
[n #fun {$} n(phon:woman number:singular) end]
women:
[n #fun {$} n(phon:women number:plural) end]
'with':
[prep #fun {$} prep(phon:'with') end]
telescope:
[n #fun {$} np(phon:telescope number:singular) end]
saw:
[v #fun {$} v(phon:saw number:_) end]
sees:
[v #fun {$} v(phon:see number:singular) end]
likes:
[v #fun {$} v(phon:likes number:singular) end
n #fun {$} n(phon:likes number:plural ) end]
like:
[v #fun {$} v(phon:like number:plural) end]
)
Verb and subject, as well as determiner and noun, must agree in number. We also copy the number
feature upward whenever necessary.
Rules =
[rule(s [np vp]
fun {$ Args}
Args.1^number=Args.2^number
s(Args.1 Args.2)
end)
rule(np [det n]
fun {$ Args}
Args.1^number=Args.2^number
np(number:Args.2^number Args.1 Args.2)
end)
rule(np [n]
fun {$ Args}
Args.1^number=plural
np(number:plural Args.1)
end)
rule(np [np pp]
fun {$ Args}
np(number:Args.1^number Args.1 Args.2)
end)
rule(vp [v np]
fun {$ Args}
vp(number:Args.1^number Args.1 Args.2)
end)
rule(vp [vp pp]
fun {$ Args}
vp(number:Args.1^number Args.1 Args.2)
end)
rule(pp [prep np]
fun {$ Args}
pp(Args.1 Args.2)
end)
rule(vp [v]
fun {$ Args}
vp(number:Args.1^number Args.1)
end)
]
<< Prev | - Up - | Next >> |