Interpreter source program input Interpreter output BASIC Lisp
해석기(Interpreter) source program input Interpreter output • 예) BASIC, Lisp, Scheme, ML, Prolog 등 • 컴파일된 코드 보다 실행속도가 느림 • 교육용이나 S/W 개발용으로 많이 쓰임 6
스캐너(Scanner) (또는 어휘분석기: lexical analyzer) • What? - 토큰인식 in : 일련의 문자들 (a stream of characters) algorithm : 어휘분석 (lexical analysis) out : 일련의 토큰들 (a stream of tokens) • 예 : 입력: a[index] = 4 + 2 출력: 19
파서(Parser) • What? - 프로그램의 구조 결정(구문 분석) In : 일련의 토큰들 (a stream of tokens) algorithm : 구문분석 (syntax analysis) out : 파스트리(구문트리) (parse tree / syntax tree) • 예: expression assign-expression = subscript-expression identifier a [ expression identifier index expression additive-expression ] expression number 4 + expression number 2 20
추상구문트리 expression assign-expression = subscript-expression identifier a [ expression identifier index expression additive-expression ] expression number 4 + expression number 2 위의 파스 트리를 추상화시키면? 22
추상구문트리 expression assign-expression subscript-expression [ expression additive-expression ] identifier index identifier a expression = expression number 4 + expression number 2 assign-expression subscript-expression identifier a identifier index additive-expression number 4 number 2 23
장식구문트리 assign-expression int subscript-expression int array identifier a int additive-expression int identifier index int number 4 int number 2 26
원시코드 최적화기 (Source-code Optimizer) • 원시코드 수준에서의 코드 향상(최적화) • 예제: 장식구문 트리상에서의 성능향상 – 상수접기(Constant folding) • 예: 4+2 6 assign-expression int subscript-expression int array identifier a int identifier index int additive-expression int number 4 int number 2 27
중간 코드 최적화 “a[index] = 4 + 2”에 대한 3 -주소 코드 t = 4 + 2 a[index] = t t는 덧셈의 중간결과를 임시로 저장하기 위한 변수 assign-expression t = 6 a[index] = t int subscript-expression int array a[index] = 6 identifier a int additive-expression int identifier index number 4 int number 2 29
- Slides: 33