我正在尝试为 LOLCODE 编写一个解释器,它从以下形式的文件中读取转义字符串:
VISIBLE "HAI \" WORLD!"
我希望显示以下输出:
HAI " WORLD!
为了做到这一点,我尝试为 printf 动态生成格式字符串,但似乎转义是在字符串文字的声明阶段完成的。
从本质上讲,我正在寻找的正是这个问题的反面: Convert characters in ac string to their escape sequences
有什么办法可以解决这个问题吗?
我正在尝试为 LOLCODE 编写一个解释器,它从以下形式的文件中读取转义字符串:
VISIBLE "HAI \" WORLD!"
我希望显示以下输出:
HAI " WORLD!
为了做到这一点,我尝试为 printf 动态生成格式字符串,但似乎转义是在字符串文字的声明阶段完成的。
从本质上讲,我正在寻找的正是这个问题的反面: Convert characters in ac string to their escape sequences
有什么办法可以解决这个问题吗?
这是一个非常标准的扫描练习。根据您打算与 LOLCODE 规范的接近程度(我现在似乎无法达到,所以这是从记忆中得出的),您有几种方法可以走。
这并不像听起来那么难。您只想一次分析输入的一个字符,同时保留一些上下文信息。在您的情况下,重要的上下文包含两个标志:
"清零"。\之后读取字符时清除,不管它是什么。然后一般算法看起来像:(伪代码)
loop on: c ← read next character
  if not inString 
    if c is '"' then clear buf; set inString
    else [out of scope here]
  if inEscape then append c to buf; clear inEscape
  if c is '"' then return buf as result; clear inString
  if c is '\' then set inEscape
  else append c to buf
inEscape如果您想实施\r等,您可能想改进案例\n。
您不是第一个编写 LOLCODE 解释器的人。偷看别人是怎么做的也没什么不好。例如,这是来自 lci 的字符串解析代码。