c - 我应该在解析时将源文件保存在内存中吗?

标签 c parsing

我正在编写解释器的前端部分,最初我不喜欢将所有源文件转储到内存中然后直接引用该文本的想法。因此,分词器从字符缓冲区读取并构建分词流。

但是,我已经到了解析方面,这让我很吃惊,因为我想输出很好的错误和警告,显示格式错误的源代码行。我想我可以把列号放在标记中,但是通过错误消息就像通过电话获取方向一样:“它在文件 X 中,在 Y 行,Z 列,就在大括号旁边,你知道那个。如果你打了分号,你已经走了很远。”

我似乎让自己陷入了既想吃蛋糕又想吃蛋糕的境地。我想要好消息,但我不想占用内存。

有什么我想念的吗?还是将源代码加载到内存中?

最佳答案

当有错误要报告给用户时,报告它需要多长时间(以毫秒为单位)并不重要。

我会将您的标记化流保存在内存中,以使您的解释器保持快速。 (实际上,您应该切换到线程解释器,甚至是糟糕的一次性编译器,以提高执行率)。

当您遇到错误时,转到磁盘,获取感兴趣的行,并将它们显示给用户。如果他没有犯任何错误,那么您的成本为零。如果他犯了少量错误,那可能会有点低效,但用户不会知道。如果他犯了很多错误,包含错误的文件的文件内容将被操作系统读取到它的本地缓存中,无论如何这可能比您的程序大,因此访问将比保留源代码更有效完全在磁盘上。

关于c - 我应该在解析时将源文件保存在内存中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580598/

相关文章:

python - 从网页获取国际字符?

c# - 为什么 decimal.TryParse 成功解析了类似 12,2,2,2 的东西

ios - 是否有适用于 ios 的良好 CSV 解析器?

c - 在本地网络中读取 tcp 套接字上的完整数据

c - C 中相反方向的对角矩阵

java - XML 解析器保留所有空白、属性排序、引号、CDATA、命名空间等

python - 迭代从 csv 传递过来的列表。柱子

c - 将参数传递到线程的安全方法

c -/proc/interrupts 如何更新?

c - 在c中定义了一个空数组