Расширить 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).
Вы могли бы также просто хотеть сломаться и использовать другой инструмент. Я понимаю, это то, что другие, вероятно, говорят вам. Как я уже сказал, я восхищаюсь вашей настойчивостью.