BCPL

BCPL(Basic Combined Programming Language)은 1966년 케임브리지 대학교에서 마틴 리처드가 설계한 절차적 명령형, 구조적 컴퓨터 프로그래밍 언어이다.

원래 다른 언어들을 위한 컴파일러를 작성하기 위해 고안하였다가, BCPL은 더 이상 일반적으로 쓰이지 않게 되었다. 그러나 이 언어의 영향력은 여전한데 BCPL을 문법적으로 변경한 것이 이른바 B이고, C 프로그래밍 언어가 이것 위에 기반을 두었기 때문이다. 이로 말미암아 수많은 C 프로그래머들에게 Before C Programming Language라는 유머러스한 배크로님을 선사해 주었다.

BCPL은 활 괄호({ })를 사용한 최초의 프로그래밍 언어이다. 괄호는 거듭되는 문법의 변화를 생존시켰고, 프로그램 소스 코드의 문들을 표기하는 일반적인 수단이 되었다. 현실적으로 당시 키보드의 제한으로 소스 프로그램들은 종종 { } 기호 대신 $( 와 $) 기호를 종종 사용하였다. BCPL에서 쓰이는 '//'라는 한 줄 주석은 C에 도입되지 않았지만 C++과 나중에 C99에 다시 등장하였다.

예 
아래의 완전하고 호환성 있는 예제는 마틴 리처드의 BCPL 배포판에서 가져온 것이다.

팩토리얼 인쇄:
GET "LIBHDR"

LET START() = VALOF $(
	FOR I = 1 TO 5 DO
		WRITEF("%N! = %I4*N", I, FACT(I))
	RESULTIS 0
$)

AND FACT(N) = N = 0 -> 1, N * FACT(N - 1)

N퀸 문제의 카운트 해결책:
GET "LIBHDR"

GLOBAL $(
	COUNT: 200
	ALL: 201
$)

LET TRY(LD, ROW, RD) BE
	TEST ROW = ALL THEN
		COUNT := COUNT + 1
	ELSE $(
		LET POSS = ALL & ~(LD | ROW | RD)
		UNTIL POSS = 0 DO $(
			LET P = POSS & -POSS
			POSS := POSS - P
			TRY(LD + P << 1, ROW + P, RD + P >> 1)
		$)
	$)

LET START() = VALOF $(
	ALL := 1
	FOR I = 1 TO 12 DO $(
		COUNT := 0
		TRY(0, 0, 0)
		WRITEF("%I2-QUEENS PROBLEM HAS %I5 SOLUTIONS*N", I, COUNT)
		ALL := 2 * ALL + 1
	$)
	RESULTIS 0
$)

각주 

절차적 프로그래밍 언어
구조적 프로그래밍 언어
시스템 프로그래밍 언어