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


122

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

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

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

    lex --version
    lex 2.5.35
    

3
lex 버전 2.5.35는 없습니다. 플렉스 버전 2.5.35를 실행하고 있습니다. 'lex'로 호출하면 자신을 'lex'로 식별합니다
Chris Dodd

답변:


81

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는 그렇지 않습니다.


4
Yacc에 대한 정보가 올바르지 않습니다. Berkeley에는 모든 오픈 소스 BSD 운영 체제에서 BSD 라이선스에 따라 존재하고 사용할 수있는 Yacc가 있습니다. 이 계정에 대해 반대표를 던졌지 만 답변이 빠르게 수정되면 반대표를 제거하겠습니다.
Daniel C. Sobral

2
@Daniel : AFAIK, AT & T Yacc는 Berkeley에서 얻을 수 없습니다. Berkeley에서 얻은 것은 Berkeley Yacc입니다. 그것을 반영하기 위해 대답을 명확히 할 것입니다.
Jonathan Leffler

1
플렉스에서는 입력 버퍼를 쉽게 전환 할 수 있습니다 (본질적으로 처리하기 위해 한 번 수행했습니다 #include). lex & yacc에 대한 나의 O'Reilly 책은 역겨운 해킹을 통해서만 lex에서만 가능하다고 말했습니다.
vonbrand

33

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


1
또한 Berkeley의 yacc 구현 인 byacc는 널리 사용 가능합니다 (데비안 저장소 목록에서 볼 수 있습니다).
Michael Ekstrand

1
flex는 lex보다 훨씬 빠르기 때문에 그렇게 불립니다 . 그것은 몇 가지 확장자를 가지고 있으며 생성 된 파일은 전혀 유사하지 않습니다 (즉, lex의 추악한 해킹은 flex에서 작동하지 않으며 그 반대도 마찬가지입니다).
vonbrand

11

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


1
내 시스템 (Arch Linux)에서 두 바이너리가 같은 방식으로 작동하지 않습니다. 아마도 lex 호환성 기능 일 것입니다.
Danilo Bargen

10

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


2

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.