일지
인터프리터...5
niamdank
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
더보기