Есть ли способ настроить действия Raku так, чтобы они выполнялись только после успешного завершения анализа? Например, программа ниже выводит «Джейн сообщает нам свой возраст....», даже при неправильном вводе.
grammar Foo {
rule TOP { <name> is \d+ }
token name { [Anne | Jane] { say "$/ is telling us her age...."; } }
}
say so Foo.parse('Anne is 100'); # True
say so Foo.parse('Jane is Leaf'); # False
Вы можете переместить блок кода в правило TOP
;
grammar Foo {
rule TOP { <name> is \d+ { say "$/<name> is telling us her age...." } }
token name { [Anne | Jane] }
}
say so Foo.parse('Anne is 100');
say so Foo.parse('Jane is Leaf');
Anne is telling us her age....
True
False
используя процедуры make
и made
;
grammar Foo {
rule TOP { <name> is \d+ }
token name { [Anne | Jane] { make "$/ is telling us her age...." } }
}
say Foo.parse('Anne is 100').<name>.made;
say Foo.parse('Jane is Leaf').<name>.made;
Anne is telling us her age....
Nil
или их сочетание.
grammar Foo {
rule TOP { <name> is \d+ { say $/<name>.made } }
token name { [Anne | Jane] { make "$/ is telling us her age...." } }
}
say so Foo.parse('Anne is 100');
say so Foo.parse('Jane is Leaf');
Anne is telling us her age....
True
False
Помните, что для решения более сложных задач вы можете использовать Действия.