首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将转义序列从用户输入转换为真实的表示形式

将转义序列从用户输入转换为真实的表示形式
EN

Stack Overflow用户
提问于 2013-02-14 18:14:12
回答 1查看 628关注 0票数 4

我正在尝试为LOLCODE编写一个解释器,它可以从以下格式的文件中读取转义字符串:

代码语言:javascript
复制
VISIBLE "HAI \" WORLD!"

对于它,我希望显示以下输出:

代码语言:javascript
复制
HAI " WORLD!

为此,我尝试为printf动态生成一个格式字符串,但转义似乎是在字符串文字的声明阶段完成的。

从本质上讲,我所寻找的与这个问题完全相反:Convert characters in a c string to their escape sequences

有什么办法可以解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-14 22:23:30

这是一个非常标准的扫描练习。根据您打算与LOLCODE规范接近的程度(我现在似乎还不能达到这个规范,所以这是基于内存的),您还有几条路要走。

手写词法分析器

这并不像听起来那么难。您只需要一次分析输入的一个字符,同时维护一些上下文信息。在您的例子中,重要的上下文由两个标志组成:

  • 要记住你当前正在分析一个字符串。它将在读取"时设置,并在读取".
  • one时清除,以记住前一个字符是转义字符。它将在读取\时设置,在之后读取字符时清除,无论它是什么。

然后一般的算法如下:(伪代码)

代码语言:javascript
复制
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

如果您想要实现\r\n等,您可能需要改进inEscape的用例。

使用词法分析器生成器

这里的传统工具是lexflex

获得灵感

您不是第一个编写LOLCODE解释器的人。偷看别人是怎么做的并没有错。例如,这里是the string parsing code from lci

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14872399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档