2013-07-04 2 views
0

에 의해 생성 된 파일은 lex tool (나는 ocamllex를 읽는다)에 대해 DFA (실제로 NFA와 NFA2DFA에서)를위한 C (OCaml) 코드로 정규 표현식 모음을 변환 할 것이라고 말한다. 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

안녕하세요 자세한 내용 감사드립니다. 나는 그 이유를 연구하고있다. [-ml] 옵션을 사용하여 출력 코드가 Lexing 모듈의 내장 오토 마톤 인터프리터를 사용하지 않음으로써 ocamllex와는 다른 출력을 갖는 방법을 발견했습니다. 안부, – dag