Lex (소프트웨어)

Lex (software)
렉스
원본 작성자마이크 레스크 에릭 슈미트
초기출시1975년; 48년 (1975년)
저장소
기재.C
운영체제유닉스, 유닉스 계열, 플랜 9
플랫폼크로스 플랫폼
유형사령부
면허증.계획 9: MIT 라이선스

렉스는 어휘 분석기("스캐너" 또는 "렉서")[1][2]생성하는 컴퓨터 프로그램입니다.

렉스는 일반적으로 yaccarser 발전기와 함께 사용됩니다.원래 Mike LeskEric[3] Schmidt가 쓰고 [4][5]1975년에 기술된 Lex는 많은 유닉스 시스템의 표준 어휘 분석기 생성기이며, POSIX [6]표준의 일부로서 동등한 도구가 명시되어 있습니다.

Lex는 어휘 분석기를 명시하는 입력 스트림을 읽고 C 프로그래밍 언어로 어휘 분석기를 구현하는 소스 코드를 씁니다.

C 외에도 일부 오래된 버전의 Lex는 Ratfor에서 [7]렉서를 생성할 수 있습니다.

오픈소스

원래 독점 소프트웨어로 배포되었지만, 일부 버전의 렉스는 현재 오픈 소스입니다.원래의 독점 코드에 기반한 Lex의 오픈 소스 버전은 이제 Bell LabsOpenSolarisPlan 9와 같은 오픈 소스 운영 체제와 함께 배포됩니다.플렉스(flex) 또는 "빠른 어휘 분석기(fast lexic analyzer)"라고 불리는 렉스의 인기 있는 오픈 소스 버전은 독점 코딩에서 파생되지 않았습니다.

렉스 파일의 구조

Lex 파일의 구조는 의도적으로 yacc 파일의 구조와 유사합니다. 파일은 다음과 같이 2% 기호만 포함하는 행으로 구분된 세 섹션으로 나뉩니다.

  • 정의 섹션에서는 매크로를 정의하고 C로 작성된 헤더 파일을 가져옵니다.여기에 C 코드를 작성하는 것도 가능하며, 이 코드는 생성된 소스 파일에 그대로 복사됩니다.
  • 규칙 섹션에서는 정규식 패턴을 C 문과 연결합니다.렉서는 주어진 패턴과 일치하는 입력의 텍스트를 볼 때, 연관된 C 코드를 실행할 것입니다.
  • C 코드 섹션에는 생성된 소스 파일에 말 그대로 복사되는 C 문과 함수가 포함되어 있습니다.이러한 문에는 규칙 섹션의 규칙에 의해 호출된 코드가 포함되어 있을 수 있습니다.대규모 프로그램에서는 컴파일 에 링크된 별도의 파일에 이 코드를 배치하는 것이 더 편리합니다.

Lex 파일 예제

다음은 플렉스 버전의 렉스 파일 예시입니다.입력에 있는 숫자열(양의 정수)을 인식하여 출력하기만 하면 됩니다.

/*** 정의 섹션 ***/  %{ /* C 코드를 복사할 때 */ #허튼소리 <stdio.h> %}  %%     /*** 규칙 섹션 ***/      /* [0-9]+는 하나 이상의 숫자로 이루어진 문자열과 일치합니다 */ [0-9]+  {             /* yytext는 일치하는 텍스트를 포함하는 문자열입니다.*/             활자로 찍어내다("정수를 보았다: %s\n", yytext);         }  . \n    {   /* 다른 모든 문자는 무시합니다.*/   }  %% /*** C 코드 섹션 ***/  인트 주된(공허한) {     /* 렉서한테 전화한 다음 그만두세요     yylex();     돌아가다 0; } 

이 입력이 다음에 주어질 경우flex, C 파일로 변환됩니다.lex.yy.c 정수 문자열을 일치시켜 출력하는 실행 파일로 컴파일할 수 있습니다.예를 들어, 입력이 주어졌을 때:

abc123z!&*2gj6

프로그램이 인쇄됩니다.

쏘 정수:123 쏘 정수:2 쏘 정수:6 쏘 정수:

다른 프로그래밍 도구와 함께 Lex 사용하기

파서 생성기와 함께 Lex 사용

일반적으로 야크나 바이슨과 같은 렉스와 파서 발전기가 함께 사용됩니다.파서 생성기는 공식 문법을 사용하여 입력 스트림을 구문 분석합니다. 이는 Lex가 단순 유한 상태 오토마타로 [clarification needed]제한되어 있기 때문에 간단한 정규식을 사용하여 Lex가 할 수 없는 것입니다.

일반적으로, 예를 들어 Yacc에 의해 생성된 파서(parser)가 입력으로서 토큰 스트림("token-stream")을 받아들이도록 하는 것이 바람직하며, 이는 문자 스트림("token-stream")을 직접 처리할 필요가 없습니다.렉스는 종종 이러한 토큰 스트림을 생성하는 데 사용됩니다.

스캐너리스 파싱은 별도의 렉서 없이 입력 문자 스트림을 직접 파싱하는 것을 말합니다.

렉스 앤 메이크

make는 렉스와 관련된 프로그램을 유지하는데 사용될 수 있는 유틸리티입니다.Make는 다음과 같은 확장명을 가진 파일을 가정합니다..l렉스 소스 파일입니다.내부 매크로 만들기LFLAGS를 사용하여 [8]make에서 자동으로 호출할 Lex 옵션을 지정할 수 있습니다.

참고 항목

참고문헌

  1. ^ Levine, John R.; Mason, Tony; Brown, Doug (1992). lex & yacc (2 ed.). O'Reilly. pp. 1–2. ISBN 1-56592-000-7.
  2. ^ Levine, John (August 2009). flex & bison. O'Reilly Media. p. 304. ISBN 978-0-596-15597-1.
  3. ^ Lesk, M.E.; Schmidt, E. "Lex – A Lexical Analyzer Generator". Archived from the original on 2012-07-28. Retrieved August 16, 2010.
  4. ^ Lesk, M.E.; Schmidt, E. (July 21, 1975). "Lex – A Lexical Analyzer Generator" (PDF). UNIX TIME-SHARING SYSTEM:UNIX PROGRAMMER’S MANUAL, Seventh Edition, Volume 2B. bell-labs.com. Retrieved Dec 20, 2011.
  5. ^ Lesk, M.E. (October 1975). "Lex – A Lexical Analyzer Generator". Comp. Sci. Tech. Rep. No. 39. Murray Hill, New Jersey: Bell Laboratories.
  6. ^ The Open Group Base 스펙 이슈 7, 2018년판 § Shell & Utilities § Utilities § lex
  7. ^ John R. Levine; John Mason; Doug Brown (1992). Lex & Yacc. O'Reilly.
  8. ^ "make". The Open Group Base Specifications. The IEEE and The Open Group (6). 2004. IEEE Std 1003.1, 2004 Edition.

외부 링크