2013-07-04 3 views
0

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

  • записи называется __ocaml_lex_tables с полямами из модуля лексического
  • рекурсивная функция

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

Это таблица перехода штата? Как его читать? Спасибо за любую ссылку/подсказку!

ответ

1

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

+0

привет и спасибо за подробности. Я изучаю, что это причина. Я нашел способ получить отличный результат от ocamllex, используя опцию [-ml], выходной код не будет использовать встроенный интерпретатор автоматов Lexing. приветствует, – dag