[parsing] Flex / Lex와 Yacc / Bison의 차이점은 무엇입니까?

Flex & Lex와 Yacc & Bison의 차이점은 무엇입니까? 나는 인터넷을 격렬하게 검색했지만 확실한 답을 찾지 못했습니다.

Ubuntu에 순수 Lex 및 Yacc를 설치할 수 있습니까, 아니면 flex와 bison 만 설치할 수 있습니까? 혼란 스럽습니다.

  • Lex 또는 Yacc가 여전히 누군가에 의해 유지되고 있습니까?
  • 모두 무료입니까?
  • Lex가 무료가 아닌 경우 Ubuntu 배포판에 Lex를 설치해야하는 이유는 무엇입니까?

    lex --version
    lex 2.5.35
    


답변

Lex와 Flex 사이에는 약간의 차이가 있지만 Flex와 관련된 문제에 부딪 히려면 Lex를 남용해야합니다. (저는 Lex를 남용하고 Flex에서 작동하지 않는 프로그램을 가지고 있습니다.) 이것은 주로 input lookahead 영역에 있습니다. Lex에서는 자신의 입력 코드를 제공하고 문자 스트림을 수정할 수 있습니다. Flex는 그렇게 할 수 없습니다.

Yacc와 Bison은 매우 밀접하게 호환되지만 Bison에는 몇 가지 추가 트릭이 있습니다.

Ubuntu에 설치할 합법적 인 (원본, AT & T 버전) Lex 및 Yacc 사본을 찾을 수 없을 것입니다. 나는 그것이 불가능하다고 반드시 말하지는 않을 것이지만, 그런 사실은 모릅니다. Flex와 Bison은 쉽게 사용할 수 있으며 대부분의 목적에 동일합니다. BSD 세계에서 다양한 대안 및 대략적으로 동등한 프로그램을 찾을 수도 있습니다.

Lex 및 Yacc는 Unix SVRx 라이센스로 유지 관리됩니다. IBM (AIX), HP (HP-UX) 및 Sun (Solaris)과 같은 회사는 명령에 따라 Lex 및 Yacc 버전을 수정했습니다. MKS는 또한 MKS Lex 및 MKS Yacc를 제공합니다. 그러나 Yacc에는 적어도 일부 비표준 확장이 있습니다.

Flex와 Bison은 무료입니다. (AT & T) Lex와 Yacc는 그렇지 않습니다.


답변

Bison은 Yacc의 GNU 구현 / 확장이며 Flex는 Lex의 후속 제품입니다. 두 경우 모두 bison / flex를 사용하는 것이 좋습니다 (권장).


답변

대부분의 (모든?) Linux 시스템에서 “Lex”는 실제로 flex에 대한 심볼릭 링크입니다. 기본적으로 무료 버전과 다른 이름 일뿐입니다.


답변

YACC는 플랜 9 및 오픈 솔라리스의 오픈 소스 라이선스로 제공됩니다. 또한 원래 YACC와 호환되지만 소스 코드를 공유하지 않는 Berkeley YACC도 있습니다. Berkeley YACC는 모든 오픈 소스 BSD 운영 체제에서 찾을 수 있습니다.


답변

GNU 프로젝트의 일부인 들소. yacc는 BSD (Berkeley Software Distribution)의 유틸리티로 사용됩니다. yacc와 호환되지만 Lex와 Yacc는 과거의 일입니다. Flex와 bison은 오늘날 널리 사용됩니다.


답변