[Lexical Analyzer 2] A core concept for working with tokenization

ShinMinChul·2024년 4월 24일

Compiler Theory

목록 보기
2/6
post-thumbnail

어휘 분석을 논의할 때, 관련은 있지만 서로 다른 3개의 용어를 사용하게 될 것이다. 이 3개의 용어와 추가적으로 알아두면 좋을 개념 2가지도 함께 알아보도록 하자.



Token 토큰

Token(토큰)은 토큰 이름과 선택적인 속성 값으로 구성되는 쌍이다. 토큰 이름은 일종의 어휘 단위를 나타내는 추상적인 기호로 사용된다. 어휘 단위라는 것은 특수한 키워드 또는 식별자를 나타내는 입력 문자들의 나열이다. (예시: if,while,else, 3.14159, pi, score)

토큰은 파서가 처리하게 될 입력기호가 되며, 앞으로 우리는 이해하기 쉽게 토큰 이름은 굵은 활자체로 작성할 것이다.



Pattern 패턴

Pattern(패턴)은 토큰의 어휘항목이 취하는 형태의 서술이다. 토큰으로서 키워드인 경우(예시 : if,else,while) 단순히 키워드를 형성하는 문자의 나열이 되며, 식별자와 어떤 토큰의 패턴은 많은 스트링에 부합되는 훨씬 복잡한 구조를 띄게 된다.



Lexeme 어휘항목

Lexeme(어휘항목)은 토큰을 위한 패턴에 부합되는 원시 프로그램에 있는 문자의 나열이고 어휘 분석기에 의해서 토큰의 사례로서 인식된다.



토큰, 패턴, 어휘항목의 예시

토큰비정형적 서술어휘항목의 예
if문자 i, fif
else문자 e, l, s, eelse
comparison<, >, <=, >=, ==, !=...<=, !=
id문자 다음에 문자 또는 숫자pi, score, D2
number임의의 수, 상수3.14159, 0, 6.02e23
literal"를 제외한 "으로 둘러싸인 모든 것"Hello World!"



그래서 해당 개념으로 어떻게 분석하는데?

저 예시를 봤다면 몆가지 의문이 생길탠데 그 중에서 한 개 이상의 어휘항목이 패턴에 부합될때 어떻게 어휘항목을 표현할 것인지에 대해 알아보자.

어휘 분석기가 토큰 number 에 해당되는 원시 프로그램을 읽었을때, 해당 코드는 어떤 어휘항목인지 발견해야 한다. 그러므로 많은 경우에 어휘 분석기는 파서에게 토큰 이름뿐만 아니라 토큰이 나타내는 어휘항목을 서술하는 속성 값을 반환한다. 토큰 이름은 파싱 결정에 영향을 주고 반면에 속성 값은 파싱 후에 토큰의 번역에 영향을 주게 될 것이다.

아마 가장 중요한 위 예시처럼 토큰 id에 대한 정보 일 것이다. 보통은 식별자에 관한 정보는 어휘항목,타입,식별자가 발견된 위치(식별자에 관한 오류 메시지가 출력되는 경우)를 심볼 테이블에 보관된다. 그리고 식별자에 관한 적당한 속성 값은 그 식별자에 관한 심볼 테이블 항목에 대한 포인터가 되어서, 해당 그림처럼 작성되게 될 것이다.

profile
개발은 예술이며, 나는 예술가다.

0개의 댓글