Perl 6-子程序获取;“赤字”;输入

Perl 6-子程序获取;“赤字”;输入,perl,parsing,declaration,raku,Perl,Parsing,Declaration,Raku,因此,我一直在深入研究Perl6,并一直在考虑使用Perl6的运算符定义解释另一种语言。我知道这可以通过解析代码来实现,但我希望推动Perl6的功能,看看它能做些什么。拥有此功能也会使解析变得更容易 我试图用C风格的格式来定义变量(语言并不重要) 比如: char foo; 其中,char表示类型,foo是变量名。根据我的理解,字符可以使用如下运算符定义进行解释: sub prefix:<char>($input) { say $input; } 子前缀:($input)

因此,我一直在深入研究Perl6,并一直在考虑使用Perl6的运算符定义解释另一种语言。我知道这可以通过解析代码来实现,但我希望推动Perl6的功能,看看它能做些什么。拥有此功能也会使解析变得更容易

我试图用C风格的格式来定义变量(语言并不重要)

比如:

char foo;
其中,char表示类型,foo是变量名。根据我的理解,字符可以使用如下运算符定义进行解释:

sub prefix:<char>($input) {
    say $input;
}
子前缀:($input){
比如说$input;
}
它使用foo作为$input调用子例程。这里的想法是使用foo作为字符串,并将其引用保存在某个哈希中。问题在于,Perl 6似乎将任何裸字都视为函数调用,当它找不到“未声明的例程”时,就会抱怨

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

因此,我的问题是:

是否有一种方法可以像操作符那样接受子例程中的裸字输入


干杯

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

不一定是一个只接受单词的操作符,它可以定义为语法的一部分。也许你不需要定义一个函数,而是需要?我认为值得一提的是,有一个
环绕
关键字来定义周围的运算符。但你不会把这些空话传给它。在这种情况下,正如Schwern所指出的,您可能必须深入研究宏;看一看谢谢,伙计们,看起来俚语是与这一个,所以谢谢你指导我在正确的方向。唯一的问题是,没有太多的解释这个概念在任何地方。我发现这是一种有用的方法,但由于中途缺乏解释,我发现自己又迷路了。我似乎找到了足够体面的语法解释和太多太快的俚语例子,没有中间的。有谁有更容易理解的资源吗?实际上,你应该可以用宏来实现这一点。不幸的是,宏将成为圣诞节后的事情。