сгенерированный файл ocamllex

теория говорит об инструменте lex (я читал ocamllex), он преобразует набор регулярных выражений в код C (OCaml) для DFA (на самом деле в NFA, а также в NFA2DFA). Формальное определение DFA M — это кортеж из 5 M = {Q, Sigma, transition_function, q0, F}. В сгенерированном файле я нашел следующее:

  • запись под названием __ocaml_lex_tables с полями из модуля Lexing
  • рекурсивная функция

Существует ли сопоставление между объектами/структурами DFA и структурами, созданными ocamllex? Я не могу "видеть" это.... также я искал помощь в поиске по Google и не нашел ни одного полезного примера.
Ответ от инструмента ocamllex имеет смысл в контексте DFA, например. 7 состояний, 279 переходов, размер таблицы 1158 байт.

Это таблица переходов состояний? Как это «читать»? Спасибо за любую ссылку/подсказку!


person dag    schedule 04.07.2013    source источник


Ответы (1)


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

person ygrek    schedule 05.07.2013
comment
привет и спасибо за подробности. Я учусь, вот почему. Я нашел способ получить другой вывод из ocamllex, используя опцию [-ml], код вывода не будет использовать встроенный интерпретатор автоматов модуля Lexing. с уважением, - person dag; 05.07.2013