Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Parsing a sentence with Regexp::Grammars

by blindluke (Hermit)
on Mar 11, 2016 at 17:46 UTC ( #1157468=perlquestion: print w/replies, xml ) Need Help??

blindluke has asked for the wisdom of the Perl Monks concerning the following question:

Enlightened Monks!

I wanted to play around with Regexp::Grammars, but it seems even the basic stuff eludes me. Could someone tell me what I'm doing wrong?

#!/usr/bin/perl use v5.14; my $sentence = "Show me the money"; my $grammar = qr{ <nocontext:> <Sentence> <rule: Sentence> <VerbGroup> <NounGroup> <rule: VerbGroup> <Verb> | <Verb> me <rule: Verb> <Word> <rule: NounGroup> <Noun> | a <Noun> | the <Noun> <rule: Noun> <Word> <rule: Word> \w+ }x; sub parse { my $s = shift; say "The sentence is: $s"; if ($s =~ $grammar) { use Data::Dumper; print Dumper %/; } else { say "I did not understand you." } } parse ($sentence);

I was expecting a data structure from which I could get $verb and $noun, but what I get instead is:

The sentence is: Show me the money I did not understand you.

- Luke

Replies are listed 'Best First'.
Re: Parsing a sentence with Regexp::Grammars
by Paladin (Vicar) on Mar 11, 2016 at 17:54 UTC
    I haven't used it myself, but you seem to be missing a use Regexp::Grammars; line in your code.

      You, sir, are a gentleman and a scholar.

      This fine example of my stupidity will rank highly among its countless peers.

      Edit:

      Just in case someone gets here looking for a working example, here it is:

      use v5.14; use Regexp::Grammars; my $sentence = "Show me the money"; my $grammar = qr{ <nocontext:> <Sentence> <rule: Sentence> <VerbGroup> <NounGroup> <rule: VerbGroup> <Verb> <VPostfix>? <rule: Verb> <.Word> <rule: NounGroup> <NPrefix>? <Noun> <rule: Noun> <.Word> <rule: VPostfix> me | us | them <rule: NPrefix> a | an | the | some <rule: Word> \w+ }x; sub parse { my $s = shift; say "The sentence is: $s"; if ($s =~ $grammar) { use Data::Dumper; print Dumper \%/; } else { say "I did not understand you." } } parse ($sentence);

      The result looks like this:

      The sentence is: Show me the money $VAR1 = { 'Sentence' => { 'NounGroup' => { 'NPrefix' => 'the', 'Noun' => 'money' }, 'VerbGroup' => { 'Verb' => 'Show', 'VPostfix' => 'me' } } };

      - Luke

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1157468]
Approved by Laurent_R
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2019-12-14 02:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?