ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터프리터...5
    일지 2020. 10. 24. 12:28

    모델 인터프리터 처리계 개발 목표

    • 인터프리터의 기본 기능을 직접 구현한다.
      • 어휘 분석 루틴
      • 구문 분석 루틴
    • 프로그래밍 언어에 필요한 기능을 구현한다.
      • 변수 처리
      • 배열 처리
      • 제어문 처리
      • 함수 처리
    • 코드의 가독성을 최우선으로 한다.

     

    BBI 인터프리터의 언어 사양

    책에서는 Basic과 Ruby를 닮은 Interpreter라는 의미를 담은 BBI 인터프리터를 개발한다.

    • 변수 선언하지 않고 이용할 수 있으며 최초 대입 시 형과 초기값이 결정된다.
      • 초기화되지 않은 변수 사용 시 에러가 발생한다.
      • 글로벌 변수를 설정할 수 있다.
      • 1차원 배열을 지원한다.
      • 변수를 선언 후 사용하도록 옵션을 지원한다.
    • 함수 함수를 생성해 사용할 수 있도록 한다.
      • return 문을 사용해 값을 반환한다.
      • return 문이 없는 경우 기본 값을 반환한다.
    • 연산자 변수의 연산을 위한 연산자들을 지원한다.
      • 단항 연산자
        + (양수) - (음수) ! (부정)  
      • 이항 연산자
        + (덧셈) - (뺄셈) * (곱셈) / (나눗셈)
        \ (정수 나눗셈) % (정수 나머지)    
        < (왼쪽이 작다) <= (왼쪽이 작거나 같다) > (왼쪽이 크다) >= (왼쪽이 크거나 같다)
        == (같다) != (같지 않다) && (AND) || (OR)
    • 내장 함수 구현하지 않고 사용할 수 있는 함수가 존재한다.
      • print 함수
      • println 함수
      • input 함수
      • toint 함수
    • 제어문 조건 제어문과 반복 제어문을 구현한다.
      • if 문
      • while 문
      • for 문
    • 분기문 분기를 태울 수 있는 구문을 구현한다.
      • break 문 반복 처리를 종료한다.
      • return 문 함수를 종료한다.
      • exit 문 프로그램을 종료한다.
    • 주석 // 를 이용해 행 끝까지 주석으로 처리한다.
    • 실행 방법 main 함수가 존재하면 main함수를 실행하고 없으면 처음부터 실행한다.
      • 실행 중 함수 정의가 나오면 함수 정의는 건너뛰고 실행한다.
      • 프로그램 끝에 도달하면 종료한다.
      • exit 문을 만나면 즉시 종료한다.

     

    BBI 인터프리터 프로그램 예제

    덧셈 프로그램

    sum = 0
    println "수치를 입력해 주세요. 0을 입력하면 종료합니다."
    n = input()
    while n != 0
    	sum = sum + n
    	println "	>", sum
    	n = input()
    end

     

    소수를 구하는 프로그램

    func is_prime(n) // n이 소수라면 참을 반환한다.
    	return 0 ? n < 2
    	return 1 ? n == 2
    	return 0 ? n % 2 == 0
    	i = 3
    	while i * i <= n
    		if n % i == 0
    			return 0
    		end
    		i = i + 2
    	end
    	return 1
    end
    
    // main 함수
    func main()
    	for n = 1 to 1000
    		if is_prime(n)
    			print n, " "
    		end
    	end
    	println ""
    end

     

    퀵 소트 프로그램

    var $d[9]
    
    func main()
    	$d[0] = 60
    	$d[1] = 20
    	$d[2] = 10
    	$d[3] = 90
    	$d[4] = 50
    	$d[5] = 30
    	$d[6] = 0
    	$d[7] = 40
    	$d[8] = 80
    	$d[9] = 70
    
    	quick_sort(0, 9)
    	for i = 0 to 9
    		print $d[i], " "
    	end
    	println ""
    end
    
    func quick_sort(top, last)
    	key = $d[(top + last) \ 2]
    	i = top - 1
    	j = last + 1
    	while 1
    		i = i + 1
    		while $d[i] < key
    			i = i + 1
    		end
    		j = j - 1
    		while $d[i] > key
    			j = j - 1
    		end
    		break ? i >= j
    		wk = $d[i]
    		$d[i] = $d[j]
    		$d[j] = wk
    	end
    	if top < i - 1
    		quick_sort(top, i - 1)
    	end
    	if j + 1 < last
    		quick_sort(j + 1, last)
    	end
    end

     

    댓글

Designed by Tistory.