Расширить ocamllex для большей лексики

Есть ли способ заставить ocammlex работать с большим количеством ключевых слов? Я написал интерпретатор и парсер для немецкого языка, который "компилирует" немецкий текст в латексные картинки для анализа языка. это работает очень хорошо и действительно ново в мире лингвистики. спасибо всем разработчикам ocaml, что вы можете неправильно использовать такие инструменты, как ocamllex и menhir для таких вещей. но скоро я прибуду на границу окаммлекс-автомата по размеру лексикона, что он скажет: "автомат к большому".

Я знаю решение с помощью хеш-таблиц. Я уже не пробовал, если это решит возникающую проблему, но кто-нибудь знает, легко ли изменить какой-либо тип ограничивающего целого числа или тому подобное в исходном коде ocamllex, что я могу злоупотреблять им, не меняя код моей программы? По моему мнению, эта ошибка в отношении размеров автоматизации является излишне глупой и неудобной для дальнейшего злоупотребления, поэтому я хочу спросить.

Спасибо и хорошего дня.

1 ответ

Я приветствую вашу настойчивость в злоупотреблении инструментами:-)

Я просмотрел источники для ocamllex и вижу только одно место, которое проверяет, становится ли автомат слишком большим.

lexgen.ml возле линии 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 (на 1 меньше, чем степень 2).

Вы могли бы также просто хотеть сломаться и использовать другой инструмент. Я понимаю, это то, что другие, вероятно, говорят вам. Как я уже сказал, я восхищаюсь вашей настойчивостью.

Другие вопросы по тегам