准引号转义

Quasiquotes escaping

我想使用 Quasiquotes 将我的新语言添加到 Haskell,但该语言本身使用 |] 作为关键字。

有什么办法,如何:

a) 转义|],所以传到我的语言

b) 让我的语言的解析器决定,准引号何时结束

谢谢。

简答:稍微修改嵌入语言。

User's Guide on QuasiQuoters 说明无法对 |] 进行转义:

The quoted ⟨string⟩ finishes at the first occurrence of the two-character sequence "|]". Absolutely no escaping is performed. If you want to embed that character sequence in the string, you must invent your own escape convention (such as, say, using the string "|~]" instead), and make your quoter function interpret "|~]" as "|]".

您的解析器无法决定准引号何时结束,因为子字符串被传递给在 [<i>准引号</i>|…[=34= 之后开始的准引号] 部分和 <code>…|] 部分之前。

因此您应该稍微改变您的语言,例如使用 pre-processor 将 |~](不被视为准引号字符串的结尾)翻译成 |] .