Я пытаюсь использовать Parse::RecDescent
для создания синтаксического анализатора, который может анализировать выражения в скобках и унарный оператор ?
.
То, что у меня есть до сих пор, терпит неудачу, когда я создаю парсер, потому что правило expression
является леворекурсивным:
use strict;
use warnings;
use Parse::RecDescent;
my $test = <<END;
((foo)? bar)
END
my $grammar = q(
parse: expression(s)
expression: string | parend | expression(s)
parend : "(" (string | expression) ")" /\??/
string : /\w+/ /\??/
);
my $parser = Parse::RecDescent->new($grammar);
my $result = $parser->parse($test);
if($result){
print $result;
}else{
print STDERR "Invalid grammar\n";
}