0

该理论说关于 lex 工具(我读过 ocamllex),它会将正则表达式的集合转换为 DFA 的 C(OCaml)代码(实际上在 NFA 和 NFA2DFA 中)。DFA M 的正式定义是一个 5 元组 M = { Q, Sigma, transition_function, q0, F}。我在生成的文件中发现如下:

  • 一条名为 __ocaml_lex_tables 的记录,其中包含来自 Lexing 模块的字段
  • 递归函数

DFA 的对象/结构与 ocamllex 生成的结构之间是否存在映射?我无法“看到”它......我也在谷歌搜索寻求帮助,但我没有找到任何有用的例子。
ocamllex 工具的答案在 DFA 上下文中是有意义的,例如7 个状态、279 个转换、表大小 1158 字节

是状态转换表吗?如何“阅读”它?感谢您提供任何链接/提示!

4

1 回答 1

1

ocamllex 专注于速度,因此它不会在生成的代码中显示明确的状态。理论表示并不总是最快的,在实践中它通常被转换以解释恒定因子速度的改进。状态很可能用生成的数组中的索引来表示。您可以将其视为将汇编代码映射回真正的源代码 - 在一般情况下,不可能立即执行,因为编译器会执行一些优化并争取最紧凑和有效的代码,ocamllex 也是如此。有趣的问题是你为什么要这样做?

于 2013-07-05T01:45:56.573 回答