두 가지 질문이 있습니다. 내가 보여주는 행동이 올바른지, 그렇다면 어딘가에 문서화되어 있습니까?.parse 앵커 또는 : sigspace를 Perl 6 규칙에서 먼저 사용합니까?
나는 문법 TOP
방법으로 놀고 있었다. rule
로 선언, 그것은 :sigspace
과 함께의 시작일과 끝 문자열 앵커 의미 : 없음 공백 또는 유일한 후행 공백을
grammar Number {
rule TOP { \d+ }
}
my @strings = '137', '137 ', ' 137 ';
for @strings -> $string {
my $result = Number.parse($string);
given $result {
when Match { put "<$string> worked!" }
when Any { put "<$string> failed!" }
}
}
을, 문자열 구문 분석합니다. 선두 공백, 그것은 실패
<137> worked!
<137 > worked!
<137> failed!
나는이 rule
먼저 :sigspace
을 적용하는 것을 의미 파악하고 이후에 앵커 :
grammar Foo {
regex TOP {^:sigspace \d+ $ }
}
내가 공백을 선도 허용하는
rule
을 예상, 당신이 경우에 일어날 것
grammar Foo {
regex TOP { :sigspace^\d+ $ }
}
내가 처음에 대한 rule
에 명시 적으로 토큰을 추가 할 수 순서를 전환
grammar Number {
rule TOP {^\d+ }
}
지금 모든 작품 : 문자열의
<137> worked!
<137 > worked!
<137> worked!
나는 방법은 하나 또는 다른해야한다고 생각 할 이유가 없습니다. Grammars docs 두 가지 일이 말하지만, 워드 프로세서는 이러한 효과가 적용 주문하는 말을하지 않습니다 : 당신이 .parse 방법으로 분석하는 경우, 토큰 TOP 자동
및
를 고정되어 가주
토큰 대신 규칙을 사용하면 원자 다음의 공백이 ws의 비 캡처 호출로 변환됩니다.
나는 대답은 규칙이 실제로 패턴의 의미에 고정되지 않는다는 생각합니다. 그것은
.parse
의 작동 방식입니다. 커서는 위치 0에서 시작하고 문자열의 마지막 위치에서 끝나야합니다. 그것은 패턴 밖의 무언가입니다.
cf https://irclog.perlgeek.de/perl6/2016-12-17#i_13756072 – raiph