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


Reply via email to