3
我试图使用Parse::RecDescent
做一个解析器,它可以解析括号表达式和一元运算符?
。使用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";
}
有什么/ Z /的? – 2012-07-05 19:36:26
按承诺更新后。 – ikegami 2012-07-05 19:58:36
oops,应该是'/ \ Z /'。 '/ \ Z /'是为了确保表达式之后没有垃圾。考虑输入'(foo))bar'。如果没有'/ \ Z /',那么不正确的''bar'会被无声地忽略。 – ikegami 2012-07-05 20:03:15