grammar - 有 Perl6 规范形式吗?

标签 grammar raku canonicalization

Perl6标准语法比较庞大。虽然这有助于一旦掌握后的表达,但却为掌握造成了障碍。例如,核心构造通常具有支持不同编程范例的多种形式。一个基本的例子是创建 Pairs 的各种语法。 :

Pair.new('key', 'value'); # The canonical way 
'key' => 'value';         # this... 
:key<value>;              # ...means the same as this 
:key<value1 value2>;      # But this is  key => <value1 value2> 
:foo(127);                # short for  foo => 127 
:127foo;                  # the same   foo => 127

特别注意对第一种形式的注释:“规范方式”。

另一个例子是the documentation for method make :

This is just a little sugar for $/.made = $ast which is a very common operation in actions.

是否存在一种可以为 Perl6 程序输出的规范形式,以便在掌握规范子语法后,可以检查该形式的任何 Perl6 程序以理解它?

最佳答案

我想说 Perl6 语法(特别是 roast )规范,所以所有这些形式都是“规范”的。该注释指的是编译/执行任何其他形式时实际发生的情况。调用 Pair 类的 .new() 方法来创建新的 Pair 对象。可以这么说,无论您使用哪个选项,这种情况都会在幕后发生。其他语法只是表达相同事物的更简单的方法。

您可能会发现 .perl() 方法很有帮助。它将描述在 Perl 中表达任何变量的方式:

> Pair.new('key', 'value').perl
:key("value")
> ('key' => 'value').perl
:key("value")
> (:key<value>).perl
:key("value")

关于grammar - 有 Perl6 规范形式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44219209/

相关文章:

multidimensional-array - perl6 : access values in a multidimensional variable

raku - 空Seq的最小值是无限的,为什么?

c# - Uri规范化压缩FTP方案

cross-platform - MSYS2 上的 Perl6 脚本导致 'failed to stat file' 错误

wordpress - 同一 WordPress 页面的多个 URL

xml - (独占)XML 规范化是否忽略标签外的空格(缩进)?

c - C 中的 "for"循环后面是否需要 "{}"?

grammar - 为什么LL语法不能是左递归的?

compiler-construction - 如何留下上下文无关语法的因素?

c++ - 帮助 boost 语法