lexer - ragel 不是设计用来与文件一起使用的吗?

标签 lexer ragel

研究 ragel 并无法弄清楚如何合理地从文件中读取。据我了解,它需要一个在 token 中间不被破坏的内存缓冲区。这显然需要大量的工作来实现,特别是如果我不知道 token 的大小,例如带有换行符、转义符等的字符串。如果我实现了所有这些,我不确定我是否还需要 ragel。

有没有更好的办法?

最佳答案

如果将文件映射到内存(mmap、CreateFileMapping),您将拥有整个文件作为一个连续的内存块。

另请参阅 Ragel 用户指南(5.9 维护输入数据的指针),其中有一些用于处理这种情况的示例代码。对于可能超过固定缓冲区大小的字符串或标记,您可以使用根据需要增长的可变大小缓冲区。

关于lexer - ragel 不是设计用来与文件一起使用的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47594247/

相关文章:

c - 这段 Ragel 代码有什么作用?

parsing - 通过词法分析确定文本短语的 "Mood"

antlr - 编写没有语法文件的自定义 Xtext/ANTLR 词法分析器

go - 如何正确实现 regex/cat[s]?(\b|$)/与 ragel?

c - 如何在 Ragel 中实现前瞻

ruby - 平衡括号的简单 Ragel 示例?

c++ - 在 C++ 代码库中使用 Ragel 解析字符串的原因是什么?

antlr - 在 ANTLR 词法分析器规则中强制采用替代方案

regex - 用于 C 风格注释的 ANTLR 词法分析器

c - 编写 C 编译器时应该如何解析关键字?