Perl 6 - 子程序接受“裸字”输入

6
所以我一直在深入研究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中是< >。明显,< >是一个操作符,这导致我相信在某个地方定义了一个子例程,告诉这个操作符如何工作以及如何处理裸字输入。
那么,我的问题是:
是否有一种方式接受裸字输入到子程序中,就像< >操作符一样?
干杯!

3
<>不一定是一个接受裸字的运算符,它可以定义为语法的一部分。也许你需要添加到语法中,而不是定义一个函数。 - Schwern
1
我认为值得一提的是,有一个“circumfix”关键字来定义周围运算符。但你不会得到传递给它的裸字。在这种情况下,你可能需要深入研究宏,就像Schwern指出的那样。 - Patrick J. S.
1
正如Schwern所建议的那样,唯一的方法是引入一个新的“俚语”; 可以查看Slang::SQL - Christoph
1
谢谢大家,看起来Slangs是解决这个问题的方法,所以感谢你们指引我正确的方向。唯一的问题是在任何地方都没有太多关于这个概念的解释。我发现了这个网站https://mouq.github.io/slangs.html,它有点有用,但是由于解释在中途缺失,我又迷失了方向。我似乎找到了足够好的语法解释和过于快速的Slang示例,没有中间地带。有没有什么资源更容易理解一些? - Phyreprooph
1
实际上,您应该能够使用宏完成此操作。不幸的是,宏将成为圣诞节后的事情。 - Brad Gilbert
显示剩余4条评论
1个回答

2
最好的方法是创建一个语法解析你的语言的语法。如果你还想运行刚刚创建的DSL,可以将其与操作相结合。请注意保留HTML标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接