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