" )? 一个更普遍的问题-6ren">
gpt4 book ai didi

raku - 是否可以解析一个字符串,就好像它在 Raku 中被 << 和 >> 包围一样?

转载 作者:行者123 更新时间:2023-12-05 00:44:58 25 4
gpt4 key购买 nike

我想重用<< ... >>的解析逻辑在一个字符串上返回一个列表作为结果。比如说,我已经在一个变量中得到了字符串,$input ,如何在不使用 EVAL 的情况下解析它(例如, EVAL "<< $input >>" )?

一个更普遍的问题可能是:我如何重用各种引用构造(例如, qqww:v:!c )使用的任何解析逻辑?

最佳答案

对于您的特定示例,您可以使用 val :

my $a = 42;
say << $a b c >>.perl; # (IntStr.new(42, "42"), "b", "c")
say ("$a", "b", "c")>>.&val.perl; # same
say << "$a b" c >>.perl; # ("42 b", "c")
say ("$a b", "c" )>>.&val.perl; # same

但你必须知道 val .

I'd like to reuse the parsing logic of << ... >> on a string to get back a list as a result.



您可以查看 Rakudo 编译器的源代码以放大正在调用的函数。因此,您可能会发现 val是您示例的相关功能。

语言结构的解析从 Grammar.nqp 开始.

在页内搜索 <<产生很多匹配。我碰巧知道 << ... >>构造是一个“环绕”运算符。所以几秒钟后我在 the line in Grammar.nqp where its parsing starts .重新格式化为几行,该行归结为
token circumfix:sym«<< >>» {

:dba('shell-quote words')

'<<' ~ '>>'

<nibble(
self.quote_lang(
self.slang_grammar('Quote'),
"<<", ">>", ['qq', 'ww', 'v']
)
)>

}

然后小道立即变冷。有一个 quote_lang方法在同一个源文件中,但它显然太高了。在哪里 slang_grammar定义?

如果遇到这样的死胡同,接下来要看的地方是 NQP .果然我们找到了 matches there .

但是现在呢?真的,这一切都太复杂了。

A more general question from this is perhaps: How can I reuse any of the parsing logic used by various quoting constructs (e.g., qqww:v:!c)?



的确。

另一种通常比钻研源代码更好的途径是阅读文档。但在这种情况下,我没有从 qq:ww:v 中找到明显的路径至 val .

这导致了第三条路线 - 发布一个 SO 问题。 :)

这个答案是……不完整的。但无论如何我都会按原样发布它,希望它有帮助和/或今晚或明天我有时间改进它。或者,更好的是,也许有人有更好的答案。

关于raku - 是否可以解析一个字符串,就好像它在 Raku 中被 << 和 >> 包围一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58982153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com