首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将哪些参数传递给Marpa::R2操作?

将哪些参数传递给Marpa::R2操作?
EN

Stack Overflow用户
提问于 2015-07-03 06:31:16
回答 1查看 150关注 0票数 4

cpanMarpa::R2页面中,我理解BNF (Backus),但是我对动作回调很感兴趣。

在下面的示例中,我了解到两个成员(左成员和右成员)被传递给do_multiply。我对此没意见。问题是,我找不到关于这些论点的任何文件?

代码语言:javascript
复制
my $dsl = <<'END_OF_DSL';
:default ::= action => [name,values]
lexeme default = latm => 1    
Calculator ::= Expression action => ::first
...
    Term '*' Factor action => do_multiply
...
END_OF_DSL

my $grammar = Marpa::R2::Scanless::G->new( { source => \$dsl } );

sub do_multiply    { $_[1] * $_[2] }   

什么是$_[0],甚至是$_[3]?这个文件在哪里?即使在marpa官方网站上,我也没有看到任何文档。

在另一个例子中,这里乔波拉的回答,我们看到pair指的是$_[2]$_[3]

BNF的片段:

代码语言:javascript
复制
Hash  ::= '(' Pairs ')'     action => hash
Pairs ::= Pair+             action => pairs
Pair  ::= '(' Key Value ')' action => pair
Key   ::= String

核心代码:

代码语言:javascript
复制
$recce->read(\$input);
print Dumper $recce->value;

sub hash   { $_[2] }
sub pairs  { shift; +{ map @$_, @_ } }
sub pair   { [ @_[2, 3] ] }               # What is 2 and 3?
sub itself { $_[1] }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 07:05:03

Marpe::R2博士声明如下:

子My_Actions::do_add { my ( undef,$t1,undef,$t2 )= @_;返回$t1 + $t2;} Perl语义闭包是回调。它们是在计算解析树中的每个节点时调用的。 每个Perl语义闭包都带有一个或多个参数。值操作的第一个参数总是一个每个解析树对象,回调可以用作一个划痕。在本例中,不使用每个解析树对象.其余的参数将是节点的“子节点”的值--换句话说,按顺序计算每个RHS符号的值。如果操作为空规则,则每个解析树对象将是其唯一的参数。 每个值操作都需要返回一个值。除了一个例外,此值作为参数传递到父节点。异常是开始规则的值。开始规则的返回值成为解析结果。

因此,这些函数作为第一个参数传递一个对象。那是$_[0]

对于您的示例,文本似乎意味着以下参数,$_[1]$_[2]只是用于计算内容的值。

添加一些调试输出给了我以下内容:

代码语言:javascript
复制
use Data::Printer;

sub My_Actions::do_add {
    my ( undef, $t1, undef, $t2 ) = @_;
say 'do_add';
p @_;

    return $t1 + $t2;
}

sub My_Actions::do_multiply {
    my ( undef, $t1, undef, $t2 ) = @_;
say 'do_multiply';
p @_;
   return $t1 * $t2;
}

__END__

do_multiply
[
    [0] {},
    [1] 42,
    [2] "*",
    [3] 1
]
do_add
[
    [0] {},
    [1] 42,
    [2] "+",
    [3] 7
]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31200036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档