Skip to content

Instantly share code, notes, and snippets.

@rcfox
Created August 18, 2010 02:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rcfox/533111 to your computer and use it in GitHub Desktop.
Save rcfox/533111 to your computer and use it in GitHub Desktop.
grammar Parser::English
{
rule TOP { <sentence> };
rule sentence
{
<noun_phrase> <verb_phrase>
| <noun_phrase> <auxillary> <verb_phrase>
| <auxillary> <noun_phrase> <verb_phrase>
};
rule noun_phrase { <determiner>? <adjective_phrase>? <noun> <prepositional_phrase>? };
rule verb_phrase { <verb> <noun_phrase>? <prepositional_phrase>? };
rule prepositional_phrase { <preposition> <noun_phrase> };
rule adjective_phrase { <adverb_phrase>? <adjective> };
rule adverb_phrase { <adverb> <adverb_phrase>? };
rule auxillary { <verb> };
rule noun { noun <rest> };
rule verb { verb <rest> };
rule adjective { adjective <rest> };
rule adverb { adverb <rest> };
rule preposition { preposition <rest> };
rule determiner { determiner <rest> };
rule rest { \|?.*?\s? };
};
use v6;
use Test;
use Parser::English;
ok Parser::English.parse('noun verb'), 'Passes';
nok Parser::English.parse('noun adverb'), 'Passes';
ok Parser::English.parse('noun|verb verb'), 'Passes';
ok Parser::English.parse('noun|verb noun|verb preposition noun|verb'), 'Passes';
ok Parser::English.parse('determiner adjective|adverb noun verb'), 'Fails';
done_testing;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment