Hi guys,
To understand and play around with perl6 grammars I was trying to do a simple
NLP parts of speech parser in perl6 grammars. This is sort of what I did:
---------------------------
grammar Sentence{
proto rule VP {*}
proto rule NP {*}
rule sentence {
<imperative>|<statement>
}
rule imperative {<VP>}
rule statement {<NP> <VP>}
}
grammar VerbPhrase is Sentence{
rule VP:sym<hit> {<sym> <NP>}
rule VP:sym<kill> {<sym> <NP>}
}
grammar NounPhrase is Sentence{
#define NP:sym etc
}
grammar English is NounPhrase is VerbPhrase {
rule TOP {
<Sentence>[\. <Sentence]*
}
}
--------------------------------
So in case you don't get it, A sentence is made up of phrases which in turn can
be made up on other phrases. And English is made up of Sentences.
This sort of thing works but doesn't make much sense.
The obvious problem is that to get the correct definitions of the proto rules
in Sentence I have to say "verbPhrase is Sentence" and then "English is
NounPhrase is VerbPhrase etc" . This makes me feel like I'm doing it wrong.
How do I build a flexible dynamic grammar in a OO sort of way. For example how
could I do this so:
1) I define all my phrase structures (NP,VP,PP etc) in their own file while
still being able to use each other. There are VPs can be made of NPs and NPs
can be made up of VPs.
2) Add to these definitions dynamically. For example, here I have defined "hit
and kill" VPs. What if I wanted to add "dance" VP definition at run time?
Thanks guys!
Lard