FORCAL은 컴파일러 구성에 관심 있는 프로그래머들, 특히 컴파일러 구성 과목을 듣는 학생들에게 잘 알려진 작은 프로그래밍 언어이다. FORCAL의 문법은 다음과 같이 정의된다.
_)로 이루어지고, 적어도 한 글자는 숫자가 아니어야 한다.--로 시작하여 그 줄의 끝까지 이어진다.식별자 := 식(expression) 형태이며, 식은 식별자, 리터럴, 연산자 +와 -, 그리고 괄호로부터 다음 규칙에 따라 만들어진다.
a, b가 식이면 a + b, a - b, +a, -a, (a)도 식이다.read(식별자 목록)과 write(식 목록)이며, 목록의 항목은 쉼표로 구분한다.begin, end, read, write는 예약어이다.;)으로 끝난다.BegIN과 beGin은 같은 키워드이다.+ - ( ) := ; , 중 하나, 또는 예약어이다.참고:
:=는 하나의 토큰이다.여러 줄의 텍스트를 읽어 그 안의 FORCAL 토큰을 인식하는 프로그램을 작성하라.
입력은 여러 개의 블록으로 이루어진다. 각 블록은 여러 줄의 텍스트이며, 하나의 빈 줄로 끝난다.
각 입력 줄에 대해 다음과 같이 출력한다. 건너뛰는 중이 아닌, 비어 있지 않은 줄은 왼쪽에서 오른쪽으로 훑으며, 인식한 각 FORCAL 토큰을 한 줄에 하나씩, 입력에 나타난 형태 그대로(대소문자 보존) 출력한다. FORCAL 토큰도, 주석도, 공백(스페이스나 탭)도 아닌 문자열을 만나는 즉시 TOKEN ERROR를 한 줄로 출력하고 현재 블록의 나머지를 건너뛴다. 모든 빈 줄, 그리고 이미 TOKEN ERROR가 발생한 블록에서 건너뛰게 된 모든 줄은 각각 하나의 빈 줄로 출력한다. 각 블록은 빈 줄로 끝나므로, 결과적으로 각 출력 블록 뒤에는 적어도 하나의 빈 줄이 놓인다.