我正在将Perl6语法转换为Perl5。下面的语法代码不起作用,我使用的是Regexp::Perl5模块。请帮我举一个有效的例子。
我在发帖时遇到了这个错误--看起来你的帖子大部分都是代码;请添加更多细节。所以我重复它来添加一些文本
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;
}发布于 2019-02-14 18:52:46
<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;
}https://stackoverflow.com/questions/54679296
复制相似问题