예제를 사용한 컴파일러 설계의 어휘 분석(분석기)

어휘 분석이란 무엇입니까?

어휘 분석 컴파일러 설계의 첫 번째 단계입니다. Lexer는 문장 형태로 작성된 수정된 소스 코드를 사용합니다. 즉, 일련의 문자를 일련의 토큰으로 변환하는 데 도움이 됩니다. 어휘 분석기는 이 구문을 일련의 토큰으로 나눕니다. 소스 코드에 작성된 추가 공백이나 주석을 제거합니다.

컴파일러 설계에서 어휘 분석을 수행하는 프로그램을 어휘 분석기 또는 어휘 분석기라고 합니다. 어휘 분석기에는 토크나이저나 스캐너가 포함되어 있습니다. 어휘 분석기는 토큰이 유효하지 않음을 감지하면 오류를 생성합니다. 컴파일러 설계에서 어휘 분석기의 역할은 소스 코드에서 문자 스트림을 읽고, 합법적인 토큰을 확인하고, 필요할 때 데이터를 구문 분석기에 전달하는 것입니다.

예시

How Pleasant Is The Weather?

이 어휘 분석 예제를 참조하세요. 여기에서 How Pleasant, The, Weather, Is 다섯 단어가 있음을 쉽게 알 수 있습니다. 구분 기호, 공백 및 구두점 기호를 인식할 수 있으므로 이는 매우 자연스러운 현상입니다.

 HowPl easantIs Th ewe ather?

이제 이 예를 확인해보세요. 이것도 읽을 수 있습니다. 다만, 구분선을 엉뚱한 곳에 넣어두기 ​​때문에 시간이 좀 걸립니다. 그것은 당신에게 즉시 다가오는 어떤 것이 아닙니다.

기본 용어

어휘소란 무엇인가요?

어휘소는 토큰의 일치 패턴에 따라 소스 프로그램에 포함되는 일련의 문자입니다. 이는 토큰의 인스턴스일 뿐입니다.

토큰이란 무엇입니까?

컴파일러 디자인의 토큰은 소스 프로그램의 정보 단위를 나타내는 일련의 문자입니다.

패턴이란 무엇입니까?

패턴은 토큰에서 사용되는 설명입니다. 토큰으로 사용되는 키워드의 경우 패턴은 일련의 문자입니다.

어휘 분석기 Archi강의: 토큰을 인식하는 방법

어휘 분석의 주요 작업은 코드의 입력 문자를 읽고 토큰을 생성하는 것입니다.

어휘 분석기는 프로그램의 전체 소스 코드를 스캔합니다. 각 토큰을 하나씩 식별합니다. 스캐너는 일반적으로 파서가 요청할 때만 토큰을 생성하도록 구현됩니다. 컴파일러 디자인에서 토큰 인식이 작동하는 방식은 다음과 같습니다.

어휘 분석기 Archi강의
어휘 분석기 Archi강의
  1. "다음 토큰 가져오기"는 파서에서 어휘 분석기로 전송되는 명령입니다.
  2. 이 명령을 받으면 어휘 분석기는 다음 토큰을 찾을 때까지 입력을 검색합니다.
  3. 토큰을 Parser에 반환합니다.

어휘 분석기는 이러한 토큰을 생성하는 동안 공백과 주석을 건너뜁니다. 오류가 있으면 어휘 분석기는 해당 오류를 소스 파일 및 줄 번호와 연관시킵니다.

어휘 분석기의 역할

어휘 분석기는 아래 주어진 작업을 수행합니다.

  • 기호 테이블에서 토큰을 식별하는 데 도움이 됩니다.
  • 소스 프로그램에서 공백과 주석을 제거합니다.
  • 오류 메시지를 소스 프로그램과 연관시킵니다.
  • 소스 프로그램에 매크로가 있는 경우 매크로를 확장하는 데 도움이 됩니다.
  • 소스 프로그램에서 입력 문자 읽기

어휘 분석, 토큰, 비토큰의 예

Lexical Analyzer에 공급되는 다음 코드를 고려하십시오.

#include <stdio.h>
    int maximum(int x, int y) {
        // This will compare 2 numbers
        if (x > y)
            return x;
        else {
            return y;
        }
    }

생성된 토큰의 예

어휘소 Token
INT 키워드
최고 확인
( Opera바위 산
INT 키워드
x 확인
, Opera바위 산
INT 키워드
Y 확인
) Opera바위 산
{ Opera바위 산
If 키워드

비토큰의 예

타입
Comment // 이것은 2개의 숫자를 비교합니다
전처리기 지시문 #포함하다
전처리기 지시문 #NUMS 8,9 정의
매크로 숫자
공백 /n /b /t

어휘 오류

유효한 토큰으로 스캔할 수 없는 문자 시퀀스는 어휘 오류입니다. 어휘 오류에 대한 중요한 사실:

  • 어휘 오류는 흔하지 않지만 스캐너로 관리해야 합니다.
  • 식별자, 연산자, 키워드의 철자 오류는 어휘 오류로 간주됩니다.
  • 일반적으로 어휘 오류는 일부 불법 문자의 출현으로 인해 발생하며 주로 토큰 시작 부분에 발생합니다.

어휘 분석기의 오류 복구

다음은 가장 일반적인 몇 가지 오류 복구 기술입니다.

  • 나머지 입력에서 한 문자를 제거합니다.
  • 패닉 모드에서는 올바른 형식의 토큰에 도달할 때까지 연속 문자가 항상 무시됩니다.
  • 누락된 문자를 나머지 입력에 삽입하여
  • 문자를 다른 문자로 바꾸기
  • 두 개의 연속 문자를 바꿉니다.

어휘 분석기 대 파서

어휘 분석기 파서
스캔 입력 프로그램 구문 분석 수행
토큰 식별 코드의 추상 표현 만들기
기호 테이블에 토큰 삽입 기호 테이블 항목 업데이트
어휘 오류가 발생합니다. 소스 코드의 구문 분석 트리를 생성합니다.

Lexical과 Parser를 분리하는 이유는 무엇입니까?

  • 디자인의 단순성: 원치 않는 토큰을 제거하여 어휘 분석 및 구문 분석 프로세스를 용이하게 합니다.
  • 컴파일러 효율성을 향상하려면: 컴파일러 효율성을 향상시키는 데 도움이 됩니다.
  • 전문화: 어휘 분석 프로세스를 개선하기 위해 전문 기술을 적용할 수 있습니다.
  • 휴대성: 스캐너만 외부 세계와 통신하면 됩니다.
  • 더 높은 이식성: 어휘 분석기로 제한된 입력 장치별 특성

어휘 분석의 장점

  • 어휘 분석기 방법은 프로그래머의 코드에서 구문 분석된 데이터를 사용하여 컴파일된 바이너리 실행 코드를 생성할 수 있는 컴파일러와 같은 프로그램에서 사용됩니다.
  • 웹 브라우저에서 구문 분석된 데이터를 사용하여 웹 페이지의 형식을 지정하고 표시하는 데 사용됩니다. 자바스크립트, HTML, CSS
  • 별도의 어휘 분석기는 작업에 대해 전문화되고 잠재적으로 더 효율적인 프로세서를 구성하는 데 도움이 됩니다.

어휘 분석의 단점

  • 소스 프로그램을 읽고 이를 토큰 형태로 분할하는 데 상당한 시간을 소비해야 합니다.
  • 일부 정규식은 PEG 또는 EBNF 규칙에 비해 이해하기가 상당히 어렵습니다.
  • 어휘 분석기와 해당 토큰 설명을 개발하고 디버그하려면 더 많은 노력이 필요합니다.
  • 어휘 분석 테이블을 생성하고 토큰을 구성하려면 추가 런타임 오버헤드가 필요합니다.

제품 개요

  • 어휘 분석은 컴파일러 설계의 첫 번째 단계입니다.
  • 어휘소와 토큰은 토큰의 일치 패턴에 따라 소스 프로그램에 포함되는 문자 시퀀스입니다.
  • 프로그램의 전체 소스 코드를 스캔하기 위해 어휘 분석기가 구현되었습니다.
  • 어휘 분석기는 기호 테이블에서 토큰을 식별하는 데 도움이 됩니다.
  • 유효한 토큰으로 스캔할 수 없는 문자 시퀀스는 어휘 오류입니다.
  • 나머지 입력에서 한 문자를 제거하는 것이 유용합니다. 오류 복구 방법
  • 파서가 구문 분석을 수행하는 동안 어휘 분석기는 입력 프로그램을 스캔합니다.
  • 원치 않는 토큰을 제거하여 어휘 분석 및 구문 분석 프로세스를 용이하게 합니다.
  • 어휘 분석기는 웹 브라우저에서 JavsScript, HTML, CSS의 구문 분석된 데이터를 사용하여 웹 페이지의 형식을 지정하고 표시하는 데 사용됩니다.
  • 어휘 분석기 사용의 가장 큰 단점은 어휘 분석기 테이블을 생성하고 토큰을 구성하는 데 추가 런타임 오버헤드가 필요하다는 것입니다.