【问题标题】:Perl 6 - Subroutine taking "Bareword" inputPerl 6 - 采用“Bareword”输入的子程序
【发布时间】:2016-02-18 08:46:45
【问题描述】:

所以我一直在深入研究 Perl 6,并一直在研究使用 Perl 6 的运算符定义来解释另一种语言。我知道这可以通过解析代码来完成,但我希望推动 Perl 6 的功能,看看它可以做什么。拥有这个功能也会使解析更容易

我正在尝试以 C 样式格式定义变量。(语言不重要)

类似:

char foo;

char 代表类型,foo 是变量名。据我了解,char 可以使用如下运算符定义来解释:

sub prefix:<char>($input) {
    say $input;
}

调用带有 foo 作为 $input 的子例程。这里的想法是使用 foo 作为字符串并将它的引用保存在某个地方的哈希中。这样做的问题是 Perl 6 似乎将任何裸词视为函数调用,并且在找不到“未声明的例程”时会抱怨。

我可能到处寻找答案,唯一让我仍然认为这可能是 Perl 5 中的 qw 函数现在是 在 Perl 6 中。 显然是一个运算符,它让我相信在某处定义了一个子例程,告诉该运算符如何工作以及如何处理裸字输入。

所以我的问题:

有没有办法像 操作符一样接受裸字输入到子例程中?

干杯!

【问题讨论】:

  • &lt;&gt; 不一定是接受裸字的运算符,它可以定义为语法的一部分。也许你不需要定义一个函数,而是add to the grammar?
  • 我觉得值得一提的是有一个circumfix关键字来定义周边的操作符。但是你不会得到传递给它的空话。在这种情况下,您可能需要深入研究宏,正如 Schwern 指出的那样。
  • 正如 Schwern 所建议的,唯一的方法就是引入一个新的“俚语”;看看Slang::SQL
  • 谢谢伙计们,看起来俚语是使用这个的方式,所以感谢您指引我正确的方向。唯一的问题是在任何地方对这个概念都没有太多解释。我发现这个mouq.github.io/slangs.html 很有用,但是由于中途缺乏解释,我发现自己又迷路了。我似乎找到了足够体面的语法解释和太快太快的俚语示例,中间没有。谁有更容易理解的资源?
  • 其实你应该可以用宏来做到这一点。不幸的是,宏将成为圣诞节后的事情。

标签: perl parsing declaration raku


【解决方案1】:

最好的方法是创建一个解析您的语言的Grammar。如果您还希望它运行您刚刚创建的 DSL,请将其与 Actions 结合使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2017-01-31
    • 2013-07-06
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多