【发布时间】:2021-12-02 13:57:36
【问题描述】:
我正在使用一种类似于 ruby 的语言 gaiman,我正在使用 PEG.js 来生成解析器。
你知道有没有办法用适当的缩进来实现 heredocs?
xxx = <<<END
hello
world
END
输出应该是:
"hello
world"
我需要这个,因为这段代码看起来不太好:
def foo(arg) {
if arg == "here" then
return <<<END
xxx
xxx
END
end
end
这是用户想要返回的函数:
"xxx
xxx"
我希望代码看起来像这样:
def foo(arg) {
if arg == "here" then
return <<<END
xxx
xxx
END
end
end
如果我修剪所有行,用户将无法在需要时使用带有前导空格的字符串。有谁知道 PEG.js 是否允许这样做?
我还没有任何用于 heredocs 的代码,只是想确定我想要的东西是否可行。
编辑:
所以我尝试实现 heredocs,但问题是 PEG 不允许反向引用。
heredoc = "<<<" marker:[\w]+ "\n" text:[\s\S]+ marker {
return text.join('');
}
它表示标记未定义。至于修剪我想我可以使用location()函数
【问题讨论】:
标签: parsing code-generation peg