2016-11-24 20 views
1

Хорошо, у меня все еще возникают проблемы с грамматикой и действием perl6. Я хочу найти шаблон в строке, и как только он будет найден, измените шаблон в соответствии с действием и верните измененную строку.Ошибка грамматики и действия Perl6: «Невозможно найти метод« ann »на объекте типа NQPMu»

my $test = "xx, 1-March-23, 23.feb.21, yy foo 12/january/2099 , zzz"; 
# want this result: xx, 010323, 230221, yy foo 120199 , zzz"; 
# 2 digits for day, month, year 

grammar month { 
    regex TOP { <unit>+ } 
    regex unit { <before> <form1> <after> } 
    regex before { .*? } 
    regex after { .*? } 
    regex form1 { \s* <dd> <slash> <mon> <slash> <yy> \s* } 
    regex slash { \s* <[ \- \/ \. ]> \s* } 
    regex dd { \d ** 1..2 } 
    regex yy { (19 | 20)? \d\d } 
    proto regex mon {*} 
    regex mon:sym<jan> { \w 'an' \w* } 
    regex mon:sym<feb> { <sym> } 
    regex mon:sym<mar> { <[Mm]> 'ar' \w* } 
} 
class monAct { 
    method TOP ($/) { make $<unit>.map({.made}); } 
    method unit ($/) { make $<before> ~ $<form1>.made ~$<after>; } 
    method form1 ($/) { make $<dd>.made ~ $<mon>.made ~ $<yy>; } 
    method dd ($/) { 
     my $ddStr = $/.Str; 
     if $ddStr.chars == 1 { make "0" ~ $ddStr; } else { make $ddStr; } 
    } 
    method mon:sym<jan> ($/) { make "01"; }; 
    method mon:sym<feb> ($/) { make "02"; }; 
    method mon:sym<mar> ($/) { make "03"; }; 
} 

my $m = month.parse($test, actions => monAct.new); 
say $m; 
say $m.made; 

Но он говорит:

=== SORRY === Не можете найти метод 'апп' на объект типа NQPMu

Что я сделал не так!? Спасибо за помощь !!!

ответ

2

Это похоже на ошибку в Rakudo для меня, возможно, связанную с before, являющуюся частью синтаксиса для lookahead assertions.

Это уже может быть вызвано с помощью простого / <before> /:

$ perl6 --version 
This is Rakudo version 2016.11-20-gbd42363 built on MoarVM version 2016.11-10-g0132729 
implementing Perl 6.c. 

$ perl6 -e '/ <before> /' 
===SORRY!=== 
Cannot find method 'ann' on object of type NQPMu 

По крайней мере, это случай сообщения менее удивительной ошибки.

Вы должны сообщить об этом [email protected], cf How to report a bug.

+0

Thanks Christoph! Я сообщил об ошибке. – lisprogtor

+0

[ссылка на rt] (https://rt.perl.org/Public/Bug/Display.html?id=130218#txn-1437532) Спасибо @lisprogtor – raiph

 Смежные вопросы

  • Нет связанных вопросов^_^