准引号转义
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 将 |~]
(不被视为准引号字符串的结尾)翻译成 |]
.
我想使用 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 将 |~]
(不被视为准引号字符串的结尾)翻译成 |]
.