Теоретически и в соответствии с документацией , вы можете использовать любой аргумент для методов в грамматических действиях.
grammar G {
token TOP { \w+ }
}
class Action-Arg {
method TOP ($match) { $match.make: ~$match }
}
class Action {
method TOP ($/) { make ~$/ }
}
class Action-Fails {
method TOP ($match) { make ~$match }
}
say G.parse( "zipi", actions => Action-Arg );
say G.parse( "zape", actions => Action );
say G.parse( "pantuflo", actions => Action-Fails );
Однако две первые версии работают как положено. Но третий (который будет прямым переводом второго) терпит неудачу с
Cannot bind attributes in a Nil type object
in method TOP at match-and-match.p6 line 19
in regex TOP at match-and-match.p6 line 7
in block <unit> at match-and-match.p6 line 24
Возможно, существует какой-то особый синтаксис (в смысле make
на самом деле $/.make
, вероятно), но я просто хотел бы уточнить, соответствует ли он спецификации или это ошибка.