스칼라와 3차원 벡터에 대한 식을 계산하는 '탁상용 계산기(desk calculator)'를 작성한다. 계산기는 한 줄에 하나씩 문장을 읽는다. 각 문장은 대입문이거나 식이다.
set v = <식> 형태이다. 식을 계산한 뒤 그 결과를 변수 v에 저장하며, 이전 값이 있으면 덮어쓴다. 출력은 하지 않는다.문장은 입력에 나타난 순서대로 처리된다.
값의 종류. 값은 정확히 두 종류뿐이다. 스칼라(정수 하나)와 벡터(정수 세 개)이다. 모든 벡터는 3차원이며 각 성분은 정수이다. 모든 정수 값과 중간 계산 결과는 32비트 부호 있는 정수에 담긴다.
변수. 변수 이름은 소문자 한 글자(a–z)이다.
리터럴. 정수 리터럴은 항상 0 이상이다. 음수가 필요하면 단항 마이너스 연산자를 사용한다.
연산자.
* — 곱셈: 정수와 정수, 정수와 벡터, 또는 벡터와 정수(벡터는 성분별로 상수배 된다).+ — 두 스칼라 또는 두 벡터의 덧셈.- — 두 스칼라 또는 두 벡터의 이항 뺄셈.- — 단항 마이너스. 스칼라 또는 벡터의 부호를 바꾼다.. — 두 벡터의 내적(dot product). 결과는 스칼라이다.X — 두 벡터의 외적(cross product). 결과는 벡터이다. 이 기호는 대문자 X이다.단항 마이너스 연산자는 다른 연산자 바로 뒤에 올 수 없다. 예를 들어 2 + - 3은 허용되지 않으며 2 - 3으로 써야 한다.
우선순위와 결합 방향.
*, ., X)는 우선순위가 같고 왼쪽에서 오른쪽으로 결합한다.+, 이항 -, 단항 -)는 우선순위가 같고 왼쪽에서 오른쪽으로 결합한다.괄호와 벡터. 세 가지 괄호 종류 ( ), [ ], { }를 사용할 수 있다. 괄호로 묶인 그룹은 (일반적인 산술처럼) 계산 순서를 지정하거나, 쉼표로 구분된 식이 정확히 세 개 들어 있으면 벡터를 나타낸다. 예를 들어 {1, 2, 3}은 벡터이고 (2 + 3)은 괄호로 묶인 스칼라이다.
보통은 각 여는 괄호가 같은 종류의 닫는 괄호로 닫힌다. 한 가지 예외가 있다. 닫는 괄호는 자기와 같은 종류의 가장 가까운 여는 괄호까지(그 여는 괄호 자신을 포함하여) 아직 열려 있는 모든 그룹을 한꺼번에 닫는다.
예를 들어,
( 2 + ( a + [ b + [ c + [ d + e ) )
는 올바른 식이며
( 2 + ( a + [ b + [ c + [ d + e ] ] ] ) )
와 같다. 첫 번째 )가 a 바로 앞의 (까지 거슬러 올라가 짝을 맞추면서, 열려 있던 세 개의 [ 그룹을 암묵적으로 닫기 때문이다.
입력은 여러 줄로 이루어지며, 각 줄에는 문장(대입문 또는 식)이 하나씩 들어 있다. 한 줄 안에서 토큰의 앞뒤나 사이에는 공백이 몇 개든(0개 포함) 올 수 있다. 어떤 줄도 500자를 넘지 않는다. 입력은 done이라는 단어만 있는 줄로 끝난다. 모든 입력 줄은 올바른 문장이다.
각 식 문장(대입문은 제외)에 대해 그 값을 한 줄에 하나씩 출력한다. 결과가 스칼라이면 정수만 출력하며 앞뒤에 공백을 두지 않는다. 결과가 벡터이면 (x,y,z) 형태로, 즉 정수 세 개를 쉼표로 구분하여 공백 없이 출력한다.