3
Parse::RecDescent
괄호 식을 구문 분석 할 수있는 파서와 단항 연산자 ?
을 사용하려고합니다. 나는 규칙 expression
왼쪽 재귀 때문에 파서 만들 때 내가 지금까지 실패한 것을Parse :: RecDescent를 사용하여 중첩 된 괄호로 문자열 구문 분석
:
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/하시나요? –
약속 된대로 게시물이 업데이트되었습니다. – ikegami
oops, 그건'/ \ Z /'이어야합니다. '/ \ Z /'는 표현식 뒤에 정크가 없는지 확인하는 것입니다. 입력'(foo)) bar '를 생각해 보자. '/ \ Z /'가 없으면 잘못된') bar '가 자동으로 무시됩니다. – ikegami