본문 바로가기

컴파일러3

[컴파일러] - Semantices What do we need to know to compile this? Beyond Syntax CFG는 프로그래밍 언어의 구문 구조를 정의하는 데 사용되지만, 언어의 모든 의미론적 측면(Semantic aspect)을 포착하지는 못한다. CFG는 토큰과 그들의 조합으로 구문을 정의하지만, 변수의 선언, 타입 일관성, 표현식의 유효성, 메서드 호출의 적절성 등과 같은 의미론적 규칙은 포함하지 않는다. 이러한 의미론적 규칙은 컴파일러나 인터프리터가 소스 코드를 분석하고 실행 가능한 프로그램을 생성하는 데 필수적임 의미론적 규칙의 예: 변수 선언 확인: 프로그램에서 사용되는 모든 변수가 선언되었는지 확인 표현식 내 타입 일관성: 연산자와 피연산자 간의 타입이 적절히 일치하는지 검사 할당 가능성 검사: x .. 2024. 1. 25.
[컴파일러] - IRs Intermediate Representations Abstract Syntax Tree(ASTs) Linear Representations & more What’s a Parser to Do? Idea: 중요한 포인트를 찾아내는 것(파서가 문백을 파악하고 의미적인 처리를 수행) → semantic action LR에서 production이 reduce 될때 or LL에서 convenient point(파서가 현재 입력 스트림에 대해 적절한 규칙을 선택할 수 있는 지점) 규칙이 S → aSb | ε이고 현재 입력이 'a'로 시작한다면, 파서는 S → aSb 규칙을 적용할 것이다. 여기서 'convenient point'는 a를 인식하는 시점 전형적인 semantic actio.. 2024. 1. 25.
[컴파일러] - LL Parsing Basic Parsing Strategies Bottom-up 입력을 가장 낮은 단계부터 시작해 트리구성, 다음 입력을 shift 하거나 핸들을 진행해 reduce 모든 입력이 읽히고 그 결과가 문법의 시작 심볼로 reduce되면 파싱 완료 LR(k)와 subset들(SLR(k), LALR(k),…) Top-Down 시작심볼로부터 출발해 반복적으로 non-terminal을 선택하고 확장 확장된 트리가 입력과 일치하면 성공적으로 파싱완료 LL(k) Predictive Parsing 다음 입력 심볼만 보고 어떤 문법 규칙을 적용할지 결정할 수 있을때 사용하는 기법 LL파싱에 해당하며 Backtracking하지 않는 top-down 파싱 룩어헤드(Lookahead) 토큰을 사용하여 어떤 규칙을 적용할지 미리 .. 2024. 1. 25.