![]() Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : fdshops ( 1003) PHP Version : 8.2.21 Disable Function : NONE Directory : /usr/share/doc/perl-Parse-RecDescent-1.967009/demo/ |
#!/usr/bin/perl -sw # PARSE LOGICAL EXPRESSIONS use Parse::RecDescent; $grammar = q{ expr : '[' <leftop: atom /,?/ atom>(?) ']' { $item[2] } | '[[' atomlist ']]' { $item[2] } | disj no_garbage { $item[1] } | <rightop: atom '=' num> | <leftop: atom '<<' num> atomlist: <leftop: atom /,?/ atom> no_garbage: /^\s*$/ | <error: Trailing garbage: $text> disj : <leftop: conj /(or)/ conj > conj : <leftop: unary 'and' unary > and : 'and' unary : 'not' atom | '(' expr ')' { $item[2] } | atom atom : /(?!and|or)[a-z]/ num : /\d+/ }; $parse = new Parse::RecDescent ($grammar) or die "bad grammar"; $input = ''; use Data::Dumper; print "> "; while (<>) { if (/^\.$/) { print STDERR Data::Dumper->Dump([$parse->expr($input)]); $input = '' } else { $input .= $_ } print "> "; }