#! /usr/bin/perl use warnings; use strict; use Data::Dumper; use Marpa::R2; my $dsl = << '__DSL__'; :default ::= action => [values] lexeme default = latm => 1 Expression ::= ('(') Expression (')') action => ::first | Assignment action => ::first | Expression ' & ' Expression | Expression ' | ' Expression Assignment ::= key '=' value key ~ [\w]+ value ~ [\w]+ __DSL__ my $grammar = 'Marpa::R2::Scanless::G'->new({ source => \$dsl }); for my $condition ( '(column08=Submit & column10=Delivered & column09=Something)', '((column08=Submit & column10=Delivered & column09=Something) | (column08=Delivered))', '((column08=Submit & column10=Delivered & column09=Something) | (column08=Delivered & column09=Something))', ) { print $condition, "\n"; my $parser = 'Marpa::R2::Scanless::R'->new({ grammar => $grammar }); $parser->read(\$condition); print Dumper $parser->value; }