2011-10-03 73 views
0

我有一个文件,我将其中的所有字符串进行标记。令牌化文件中的字符串

因此,每个令牌都被存储在char *token = (char *) malloc(len + 1);令牌在新的令牌被分配之前被释放,所以我需要一种方法来存储令牌以供进一步使用。

什么是存储令牌的好方法?我有一个函数可以一次打印出一个令牌字符串。

我在这里的问题不是如何来标记或解析所以请忽略的是落实。我的问题是,我有一堆字符串在一个循环中被分配和释放了好几次。那么,如何将每个分配存储在别处以供进一步使用呢?

+2

我们可以看到这个文件的例子吗? –

+3

你能提供一些更多的上下文吗?你想做什么? –

+1

目前,您的问题的答案范围从完整的词法分析解决方案(如lex)或简单的字符串标记器(如strtok)。正如其他人所说的提供更多细节。 – Joe

回答

0

一般令牌不存储到文件。当解析器准备好读取更多输入时,解析器会请求它们。

这样,令牌被存储在该程序的堆内存,并且它们已被处理后(这可能是长前的文件被完全解析)它们被释放。

---更新跟随编辑---

如果你担心过多的分配和释放,那么你就有了一些解决方案,这取决于你正试图解决这一问题的细节。

对于字符串,你可以通过一个“字符串生成器”界面,检查是否字符串已经存在与文本创建它们,如果是这样,返回到已经存在的字符串的引用。请注意,为了正常工作,所有返回的字符串必须是不可变的(因为在一个引用中更改字符串将更改所有引用中的字符串)。类似的解决方案是可能的数字,布尔值等

对于令牌再利用,可以使令牌为结构主要由指针引用可能“拿来主义”解析器的数据。这样解析器抓取标记的“字段”,并且“骨架”标记可以被添加回“重用队列”。重用队列应在重置标记器的“数据”引用之前将其返回给标记器,重写器会重写该标记器以向队列请求其数据结构。在队列中没有令牌的情况下,队列应该静静地分配它们。

其他的解决方案也存在,这取决于你想如何狡猾获得。

+0

请参阅编辑。谢谢 – darksky

+0

我已更新问题以解决某些编辑问题。 –