【发布时间】:2015-02-09 20:24:26
【问题描述】:
我有一个简单的文本编辑器。我想为它添加一个类似 C 的 /* comment blocks */ 着色器。
我的意思当然是多线 cmets。
它的数据结构如下:
struct TextEdit
{
struct Line
{
char* str;
int len;
};
Line* index;
int lines;
void Modified( int line_from, int line_to );
bool IsInBlockComment( int line, int column );
};
每次修改文本时都会调用Modified(),因此编辑器有机会重新扫描修改后的行范围内的内容。
- 您将如何实现
IsInBlockComment()方法,该方法可以确定文本中的给定位置是否在块注释内? -
Modified()应该添加和维护哪些额外的数据才能高效地执行此操作?
重要细节:
/* 和 */ 标记如果出现在 // 注释之后或出现在 "" 和 '' 文字字符串中,则它们不应生效。
我不是要求工作源代码或详细规格,我只是要求一个简短的概念。
【问题讨论】:
-
这并不是一项简单的任务。您必须实现一个处理单行 cmets 和字符串的解析器。
-
它已经解析了单行 cmets 和 '' "" 文字,最重要的是 /* */,这样我就不需要在每次它有微小变化时重新解析整个文档,如所示通过修改方法。
-
struct看起来不像是 C,而是 C++。 -
@thumbmunkeys:文本中 /* 开仓和 */ 平仓的链接列表,由于非修改行的行号经常变化,因此维护起来没有太大帮助。我还尝试了每行额外的标志,表明该行完全在块注释内 - 更好一点。但我的问题是关于你的想法不是我的:)
-
@Anonymous 你总是应该就一个问题展示你自己的研究成果,即使它不成功
标签: c algorithm parsing semantics