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