gpt4 book ai didi

javascript - Sweet.js 表达式到字符串文字

转载 作者:行者123 更新时间:2023-11-30 17:22:52 28 4
gpt4 key购买 nike

我正在尝试编写一个将标记转换为字符串的宏。我当前的宏如下所示:

macro stringify {
case {
$name($token)
} => {
letstx $tokenStr = [makeValue(unwrapSyntax(#{$token}), #{here})];
return #{
$tokenStr
}
}

case {
$name($token $rest ... )
} => {
return #{
stringify($token) , stringify($rest ...)
}
}
}

这适用于将标识符转换为字符串,但无法将文字或表达式转换为字符串。这是我的测试用例及其编译成的内容:

stringify(a b 7 d e foo 5+9)

编译成:

'a', 'b', 7, 'd', 'e', 'foo', 5, '+', 9;

我希望它编译成:

'a', 'b', '7', 'd', 'e', 'foo', '5+9';

我以为我可以通过使用 expr 模式类来完成此操作,但是当我这样做时,我收到此错误:

/usr/local/lib/node_modules/sweet.js/lib/sweet.js:99
throw new SyntaxError(syn.printSyntaxError(source$2, err))
^
SyntaxError: [makeValue] Cannot make value syntax object from: [object Object]
at expand$2 (/usr/local/lib/node_modules/sweet.js/lib/sweet.js:99:27)
at parse (/usr/local/lib/node_modules/sweet.js/lib/sweet.js:135:29)
at Object.compile (/usr/local/lib/node_modules/sweet.js/lib/sweet.js:143:19)
at Object.exports.run (/usr/local/lib/node_modules/sweet.js/lib/sjs.js:70:45)
at Object.<anonymous> (/usr/local/lib/node_modules/sweet.js/bin/sjs:7:23)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10

这似乎是由 makeValue 函数无法处理表达式引起的。

如果有人能给我提供一些见解,我将不胜感激。

最佳答案

因此 expr 将是您需要映射的标记数组。简单的例子:

macro str_expr {

case {
_ ($toks:expr)
} => {
var toks = #{$toks};
var toks_str = toks.map(function(tok) { return unwrapSyntax(tok); }).join("");
letstx $tok_str = [makeValue(toks_str, #{here})];
return #{
$tok_str
}
}
}

str_expr (2 + 4)
// expands to '2+4'

您只需要分别处理普通 token 情况和 :expr 情况。

关于javascript - Sweet.js 表达式到字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24809324/

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