-
구문 분석
인터프리터는 소스 프로그램을 읽은 뒤 의미가 있는 최소 단위로 분할한다. 이때 의미가 있는 최소 단위를 토큰이라고 한다. 토큰의 종류는 다음과 같다.
- 키워드
- 식별자
- 상수
- 문자열 리터럴
- 연산자
- 분리자
의미가 있는 최소 단위를 토큰과 단어로 구분해 부르기도 하며 각각의 의미는 다음과 같다.
- 토큰 생성된 종류별 정보 전체
- 단어 규칙과 일치하는 문자열 값
어휘 분석 루틴의 역할
일반적으로 어휘 분석 루틴은 구문 분석 루틴에서 호출되며 다음의 기능을 담당한다.
- 주석 제거
- 라인 넘버 관리
- 구분 문자 제거
- 토큰 추출 및 정보 설정
문을 실행할 때마다 소스 프로그램을 어휘 분석하는 것은 효율적이지 않으므로 다음과 같이 구성한다.
- 소스 프로그램을 읽는다.
- 어휘 분석을 하고 단축 기호화한 내부 코드로 변환한다.
- 내부 코드에서 토큰을 추출하면서 구문 분석 및 실행한다.
※ 2와 3은 토큰을 추출한다는 의미에서 같은 작업이지만 2에서 처리에 필요한 정보를 심어두어 3에서 토큰 추출이 빨라지게 된다.
- BBI 인터프리터에서의 예제
- convert() 선두에 출현하는 토큰(for 등)을 분석한다
- convert_rest() 나머지 토큰을 분석한다
- nextTkn 소스 프로그램에서 타음 토큰을 추출한다
- statement() '문'을 분석한다
- expression() '식'을 분석한다
- nextCode() 내부 코드에서 다음 토큰을 추출한다
소스 프로그램에서 토큰 추출
구문 분석 { convert() token = nextTkn(); convert_rest() token = nextTkn(); } 어휘 분석 { nextTkn() 다음 토큰을 반환한다 ... }
내부 코드에서 토큰 추출
구문 분석 { statement() code = nextCode(); expression() code = nextCode(); } 어휘 분석 { nextCode() 다음 토큰을 반환한다 ... }
더보기참고문헌