【问题标题】:lexical analyser generator in kernel space内核空间中的词法分析器生成器
【发布时间】:2012-12-17 12:15:47
【问题描述】:

内核模块化调试器 (kmdb) 使用 lex 生成词法分析器以使用内核空间 [1]。有一些 hack,其中一些甚至不兼容 POSIX。

我有问题:

  1. 在内核模式下使用 lex 有哪些陷阱?
  2. 是否有任何合理的方法可以将 [1] 用于 flex [2]?
  3. 内核空间的 lex/flex 有哪些替代方案?

(最后我将构建和使用 illumos 的 lex,但我真的想避免它)

[1]https://github.com/illumos/illumos-gate/blob/master/usr/src/cmd/mdb/common/mdb/mdb_lex.l

[2]https://github.com/westes/flex/

【问题讨论】:

  • 为什么 flex 不起作用? flex 不知道它是否为内核空间生成。
  • 我有点担心 flex i/o、缓冲区等

标签: kernel solaris lex flex-lexer


【解决方案1】:

您应该能够使用类似于 illumos lex 文件中的那些技巧来从 flex 中夺取对 I/O 的控制权。或者您可以只使用 flex 的字符串缓冲区功能。请参阅flex manual 中的 yy_scan_string 和 yy_scan_buffer。

yy_scan_string 将导致 flex 复制字符串,这可能是必要的,因为 flex 在执行过程中会修改缓冲区的内容。如果您不关心这一点,并且想要避免复制 ,那么您可以在输入末尾放置 两个 NUL,而不仅仅是一个,那么你可以使用yy_scan_buffer

flex 手册中还有一节介绍如何提供自己的内存分配函数(“Overriding The Default Memory Management”),这可能也是必要的。 Flex 不会分配除缓冲区以外的太多内存,如果您提供自己的缓冲区,则可以将 Flex 的缓冲区大小任意小。这应该可以从固定长度的字节数组中分配内存;我不知道你能做到多小,但如果你小心的话,我猜你应该能够把它缩小到几百字节。

【讨论】:

    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多