研究 ragel 并无法弄清楚如何合理地从文件中读取。据我了解,它需要一个在 token 中间不被破坏的内存缓冲区。这显然需要大量的工作来实现,特别是如果我不知道 token 的大小,例如带有换行符、转义符等的字符串。如果我实现了所有这些,我不确定我是否还需要 ragel。
有没有更好的办法?
最佳答案
如果将文件映射到内存(mmap、CreateFileMapping),您将拥有整个文件作为一个连续的内存块。
另请参阅 Ragel 用户指南(5.9 维护输入数据的指针),其中有一些用于处理这种情况的示例代码。对于可能超过固定缓冲区大小的字符串或标记,您可以使用根据需要增长的可变大小缓冲区。
关于lexer - ragel 不是设计用来与文件一起使用的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47594247/