相关疑难解决方法(0)

如何在Perl6语法中匹配十六进制数组

我有一个类似的字符串"39 3A 3B 9:;",我想提取“ 39、3A,3B”

我试过了

my $a = "39 3A 3B  9:;";
grammar Hex {
    token TOP { <hex_array>+ .* }
    token hex_array { <[0..9 A..F]> " " }
};
Hex.parse($a);
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。甚至这似乎也不起作用。

my $a = "39 3A 3B ";
grammar Hex {
    token TOP { <hex_array>+ }
    token hex_array { <[0..9 A..F]> " " }
};
Hex.parse($a);
Run Code Online (Sandbox Code Playgroud)

我确实尝试过语法:: Tracer TOP和hex_array均失败

TOP
|  hex_array
|  * FAIL
* FAIL
Run Code Online (Sandbox Code Playgroud)

regex grammar perl6

12
推荐指数
2
解决办法
148
查看次数

在 EOS 停止 Raku 语法(字符串结尾)

在将一种音乐语言翻译成另一种音乐语言(ABC 到 Alda)作为学习 Raku DSL 能力的借口的过程中,我注意到似乎没有办法终止.parse! 这是我缩短的演示代码:

#!/home/hsmyers/rakudo741/bin/perl6
use v6d;

# use Grammar::Debugger;
use Grammar::Tracer;

my $test-n01 = q:to/EOS/;
a b c d e f g
A B C D E F G
EOS

grammar test {
  token TOP { <score>+ }
  token score {
      <.ws>?
      [
          | <uc>
          | <lc>
      ]+
      <.ws>?
  }
  token uc { <[A..G]> }
  token lc { <[a..g]> }
}

test.parse($test-n01).say;
Run Code Online (Sandbox Code Playgroud)

Grammer::Tracer 显示的最后一部分说明了我的问题。

|  score
|  |  uc
|  |  * MATCH "G" …
Run Code Online (Sandbox Code Playgroud)

grammar parsing raku

9
推荐指数
1
解决办法
227
查看次数

如何在perl6中访问语法的可选部分?

作为语法的一部分,我有:

        rule EX1        { <EX2> ( '/' <EX2>)*  }
Run Code Online (Sandbox Code Playgroud)

在我的动作课中,我写了:

    method EX1($/) {
            my @ex2s = map *.made,  $/.<EX2>;
            my $ex1 = @ex2s.join('|');
            #say "EX1 making $ex1";
            $/.make($ex1);
    }
Run Code Online (Sandbox Code Playgroud)

所以基本上我只是试图将所有的连接EX2在一起,并'|'在它们之间而不是一个'/'。但是我的代码有些不对劲,因为它只会拾取第一个EX2而不是随后的代码。我如何找出可选的是什么?

perl6 raku

6
推荐指数
1
解决办法
131
查看次数

标签 统计

grammar ×2

perl6 ×2

raku ×2

parsing ×1

regex ×1