컴파일러 설계-어휘 분석
어휘 분석은 컴파일러의 첫 번째 단계입니다. 문장 형태로 작성된 언어 전 처리기에서 수정 된 소스 코드를 가져옵니다. 어휘 분석기는 소스 코드에서 공백이나 주석을 제거하여 이러한 구문을 일련의 토큰으로 나눕니다.
어휘 분석기가 유효하지 않은 토큰을 발견하면 오류를 생성합니다. 어휘 분석기는 구문 분석기와 밀접하게 작동합니다. 소스 코드에서 문자 스트림을 읽고, 합법적 인 토큰을 확인하고, 필요할 때 구문 분석기로 데이터를 전달합니다.
토큰
Lexemes는 토큰의 일련의 문자 (영숫자)라고합니다. 유효한 토큰으로 식별되는 모든 lexeme에 대해 미리 정의 된 규칙이 있습니다. 이러한 규칙은 패턴을 통해 문법 규칙에 의해 정의됩니다. 패턴은 토큰이 될 수있는 것을 설명하며 이러한 패턴은 정규식을 통해 정의됩니다.
프로그래밍 언어에서 키워드, 상수, 식별자, 문자열, 숫자, 연산자 및 구두점 기호는 토큰으로 간주 될 수 있습니다.
예를 들어, C 언어에서 변수 선언 줄
int value = 100;
다음 토큰을 포함합니다.
int (keyword), value (identifier), = (operator), 100 (constant) and ; (symbol).
토큰 사양
언어 이론이 다음 용어를 어떻게 수행하는지 이해합시다.
알파벳
유한 기호 집합 {0,1}은 이진 알파벳 집합 ({0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F})입니다. 16 진수 알파벳 집합, {az, AZ}는 영어 알파벳 집합입니다.
문자열
유한 한 알파벳 순서를 문자열이라고합니다. 문자열의 길이는 알파벳의 총 발생 횟수입니다. 예를 들어, tutorialspoint 문자열의 길이는 14이고 | tutorialspoint |로 표시됩니다. = 14. 알파벳이없는 문자열, 즉 길이가 0 인 문자열은 빈 문자열로 알려져 있으며 ε (엡실론)으로 표시됩니다.
특수 기호
일반적인 고급 언어에는 다음 기호가 포함됩니다.
산술 기호 | 더하기 (+), 빼기 (-), 모듈로 (%), 곱하기 (*), 나누기 (/) |
구두 | 쉼표 (,), 세미콜론 (;), 점 (.), 화살표 (->) |
할당 | = |
특별 과제 | + =, / =, * =,-= |
비교 | ==,! =, <, <=,>,> = |
전 처리기 | # |
위치 지정자 | & |
논리적 | &, &&, |, ||,! |
시프트 연산자 | >>, >>>, <<, <<< |
언어
언어는 일부 유한 알파벳 세트에 대한 유한 문자열 세트로 간주됩니다. 컴퓨터 언어는 유한 집합으로 간주되며 수학적으로 설정된 연산을 수행 할 수 있습니다. 유한 언어는 정규식을 사용하여 설명 할 수 있습니다.
최장 일치 규칙
어휘 분석기가 소스 코드를 읽을 때 코드 문자를 문자별로 스캔합니다. 그리고 공백, 연산자 기호 또는 특수 기호를 만나면 단어가 완성 된 것으로 결정합니다.
For example:
int intvalue;
두 용어를 'int'까지 스캔하는 동안 어휘 분석기는 그것이 키워드 int 인지 식별자 int 값의 이니셜 인지 여부를 확인할 수 없습니다 .
가장 긴 일치 규칙은 사용 가능한 모든 토큰 중에서 가장 긴 일치를 기반으로 검색된 lexeme을 결정해야한다고 명시합니다.
어휘 분석기는 다음과 같습니다. rule priority여기서 언어의 예약어 (예 : 키워드)가 사용자 입력보다 우선합니다. 즉, 어휘 분석기가 기존 예약어와 일치하는 어휘를 찾으면 오류를 생성해야합니다.