扩展ocamllex以获得更大的词典

时间:2014-07-15 13:10:31

标签: ocaml ocamlyacc ocamllex menhir

有没有办法让ocammlex工作更多关键字?我为德语编写了一个解释器和解析器,为了语言分析,它将德语文本“编译”成乳胶图片。它的工作非常精细,在语言学领域真的很新。感谢ocaml的所有开发人员,你可以滥用像ocamllex和menhir这样的工具。但很快我就会按照词典的大小来达到ocammlex-automaton的极限,它会说:“自动机很大。”

我知道哈希表的解决方案。我没有尝试过,如果这解决了问题,但是有人知道,如果在ocamllex-source-code中很容易改变某些类型的限制整数等,我可以在不改变我的程序代码的情况下滥用它?在我看来,关于自动化大小的这个错误对于进一步的滥用是不必要的愚蠢和尴尬,所以我想问。

谢谢,祝你有个愉快的一天。

1 个答案:

答案 0 :(得分:3)

我赞扬你滥用工具的持久性: - )

我查看了ocamllex的来源,我看到只有一个地方检查自动机是否变得太大了。

lexgen.ml near line 780

let do_alloc_cell used t =
  let available =
    try Hashtbl.find tag_cells t with Not_found -> Ints.empty in
  try
    Ints.choose (Ints.diff available used)
  with
  | Not_found ->
      temp_pending := false ;
      let n = !next_mem_cell in
      if n >= 255 then raise Memory_overflow ;
      Hashtbl.replace tag_cells t (Ints.add n available) ;
      incr next_mem_cell ;
      n

这只是与255的神秘比较,没有任何评论解释任何不变量等。我简要地查看了代码并查看了Lexing模块。我没有在255上看到任何非显而易见的依赖关系。所以你可以在这里用更大的值构建自己的ocamllex副本。您可以尝试1023(比2的幂小一个)。

您可能也想要分解并使用其他工具。我意识到这是别人可能会告诉你的。正如我所说,我很佩服你的坚持。