gpt4 book ai didi

perl - 将 perl6 语法转换为 perl5

转载 作者:行者123 更新时间:2023-12-05 00:41:14 24 4
gpt4 key购买 nike

我正在将 Perl6 语法转换为 Perl5。下面的 Perl5 代码不起作用,我正在使用 Regexp::Grammars 模块。请帮助我提供一个工作示例。

我在发布时收到此错误 - 看起来您的帖子主要是代码;请添加更多细节。所以我重复它来添加一些文字

perl6 代码

my $program = 'my $x = 23; say $x;';

grammar G {
rule TOP {
<statement>* %% ';'
}
rule statement {
| <variable-declaration>
| <function-call>
}
rule variable-declaration {
'my' <variable-name> '=' <value>
}
token variable-name {
'$' <alpha>+
}
token value {
<digit>+
}
rule function-call {
<function-name> <variable-name>
}
token function-name {
'say'
}
}

say G.parse($program);


perl5 代码
my $text = q[my $x = 23; say $x;];

my $parser = qr {
<nocontext:>
<Statements>
<rule: Statements> <[Statement]>* % <Separator>
<rule: Statement> <Var-Decl> | <Fun-Call>
<rule: Var-Decl> my <Var-Name> = <Value>
<rule: Var-Name> $ [a-zA-z]+
<token: Value> \d+
<rule: Fun-Call> <Fun-Name> <Var-Name>
<token: Fun-Name> say
<token: Separator> ;
}xms;

if( $text =~ $parser ) {
my %res = %/;
print Dumper \%res;
}

最佳答案

<debug: on>很有帮助。经过一些更改后它正在工作

perl5 代码

my $text = q[my $x = 23; say $x;];

my $parser = qr {
<nocontext:>
#<debug: on>
<Statements>
<rule: Statements> <[Statement]>+ % <Separator>
<rule: Statement> <VarDecl> | <FunCall>
<rule: VarDecl> my <VarName> = <Value>
<rule: VarName> \$ [a-zA-Z]+
<token: Value> \d+
<rule: FunCall> <FunName> <VarName>
<token: FunName> say
<token: Separator> ;
}xms;


if( $text =~ $parser ) {
my %res = %/;
print Dumper \%res;
}

关于perl - 将 perl6 语法转换为 perl5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54679296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com