这是一个非常标准的扫描练习。根据您打算与 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
。
使用词法分析器生成器
这里的传统工具是lex和flex。
获得灵感
您不是第一个编写 LOLCODE 解释器的人。偷看别人是怎么做的也没什么不好。例如,这是来自 lci 的字符串解析代码。