SDS 베이직

**SDS 베이직**(SDS BASIC)은 버전에 따라 **CP-V 베이직**(CP-V BASIC), **배치 베이직**(Batch BASIC) 또는 **시그마 베이직**(Sigma BASIC)으로도 알려져 있으며, 사이언티픽 데이터 시스템즈(SDS)의 시그마 시리즈 메인프레임 컴퓨터용 베이직 프로그래밍 언어 컴파일러로, 원래 1967년에 출시되었다. 제록스는 1969년에 SDS를 인수하여 제록스 데이터 시스템즈로 브랜드를 변경했고, 최종적으로 제록스로 변경하면서 이 언어는 **제록스 베이직**(Xerox BASIC)으로 알려지게 되었다.

초기 버전에는 문자열 변수 지원이 포함되어 있지 않았지만, 1971년에 출시된 CP-V 운영 체제에서 실행되는 버전에는 이 기능이 추가되었다. 문자열 라이브러리는 배열 슬라이싱 구문을 사용하여 문자열을 조작할 수 있게 했으며, 이는 HP 시분할 베이직 및 정수 베이직과 아타리 베이직과 같은 여러 마이크로컴퓨터 베이직에서 발견되는 시스템과 유사했다.

이러한 문자열 조작 방식은 DEC의 BASIC-PLUS에서 도입된 모델과는 다르며, BASIC-PLUS는 문자열 함수를 사용했다. 알테어 베이직은 BASIC-PLUS를 본떠 만들어졌으며, 이 방식은 크로스 플랫폼 버전인 마이크로소프트 베이직이 가정용 컴퓨터 시대에 거의 보편화되면서 사실상의 표준이 되었다. 이로 인해 SDS에서 현대 방언으로의 변환이 다소 어려워졌다.

SDS 베이직은 역사적으로 1971년 여름에 오리지널 스타 트렉 컴퓨터 게임이 작성된 플랫폼으로 주목할 만하다.

## 문법
원래 다트머스 베이직 모델을 따르고 대부분의 메인프레임 기반 베이직과 마찬가지로, SDS 베이직은 인터프리터가 아닌 컴파일러였으며 편집 및 실행을 위한 별도의 통합 도구를 사용했다. 편집기는 베이직 전용이었다. 줄이 입력되면 올바른 구문인지 분석된 다음 토큰화된 형태로 저장되었다. 시작 부분에 숫자가 있는 줄이 입력되면 해당 숫자에 따라 프로그램의 적절한 위치에 배치되었고, 숫자가 없는 줄은 즉시 처리된 다음 잊혀졌다. SDS는 1에서 99999 범위의 줄 번호를 허용했다. 간단한 예는 다음과 같다.


```basic
10 PRINT "HELLO WORLD"
```


많은 버전의 베이직과 마찬가지로 SDS는 한 줄의 코드에 여러 문을 포함할 수 있도록 허용했다. 대부분의 방언에서는 콜론을 사용하여 이를 나타내지만, SDS는 백슬래시,  또는 앰퍼샌드, 를 사용했다. SDS에서 이와 동등한 줄은 다음과 같다.


```basic
10 PRINT "HELLO" \ PRINT "WORLD"
```


SDS는 컴파일러였고 사용자의 소스 코드가 별도로 저장되었기 때문에 코드의 선행 공백을 유지했다. 그들은 이를 사용하여 루프의 구조를 더 명확하게 나타내도록 제안했다.


```basic
10 LET J=0, K=1
20 FOR I=K TO 8
30    PRINT J
40    M=J, J=K, K=K+1
50 NEXT I
```


이 예제에는 10행과 40행에서 볼 수 있듯이 단일 LET 문에서 여러 값을 설정하는 기능도 포함되어 있다. 이 기능은 HP 베이직에서도 발견되었다. 대부분의 베이직 버전과 마찬가지로 키워드 는 선택 사항이며 40행에서는 생략되었다. 40행은 또한 여러 할당을 쉼표로 구분할 수 있는 초기 베이직에서 볼 수 있는 할당의 대체 형식을 보여준다.

일반적인 수학 연산에는 , , , 가 포함되었으며, 지수에는  또는 를 사용했다. HP와 마찬가지로 논리적 비교는 어떤 순서로든 작성할 수 있었으므로 는 와 동등했고, 는 와 동일했다. 대부분의 방언은 두 경우 모두 후자 구문만 허용한다. HP 베이직과 달리 SDS는 해시 를 의 대체 형식으로 사용하는 기능을 포함하지 않았다.

SDS는 ON을 사용하여 계산된 GOTO를 지원했지만, ON을 줄의 시작이 아닌 끝에 두는 대체 구문도 허용했다.


```basic
GOTO 140,160,180 ON Y
```


REM의 대체 형식은 선행 별표 였다. 이는 MS 기반 베이직에서 발견되는 짧은 형식인 작은따옴표 와 유사한 목적을 가졌다.

## 문자열 처리
초기 버전의 SDS 베이직(때로는 배치 베이직 또는 BTM 베이직으로 알려짐)은 문자열 변수를 지원하지 않았다. 그러나 문자열 값은 확장 이진화 십진법 교환 부호 숫자 값으로 6자를 저장할 수 있는 숫자 변수에 할당될 수 있었다. 나중에 CP-V 베이직은 최대 132자까지 포함할 수 있는 실제 문자열 변수를 추가했으며, 이는 후행 달러 기호  또는 드물게 선행 $ &mdash; 와 는 동일하다 &mdash; 로 표시될 수 있었다. 설명서에는 후자 형식이 A00 베이직과의 호환성을 위해 추가되었다고 명시되어 있다.

내부적으로 CP-V는 런타임에 크기를 변경할 수 없는 바이트 배열로 구성된 고정 길이 문자열 레이아웃을 사용했다. 이는 HP 및 아타리와 같이 슬라이싱 표기법을 사용하는 다른 베이직과 유사했다. 이는 문자열이 힙에 동적으로 할당되는 DEC/마이크로소프트 스타일과는 대조적이다. 다른 고정 길이 베이직 방언과 달리, 문자열 변수는 사용하기 전에 DIM할 필요가 없었으며, 대신 모든 문자열은 기본적으로 최대 길이 72자로 설정되었다. 이는 더 작은 값으로 설정하여 메모리를 더 잘 관리하거나 최대 132자까지 더 긴 문자열을 허용하도록 변경할 수 있는 전역 설정이었다. 이는 를 사용하여 이루어졌다. 혼란스럽게도 SET은 변수를 DIM 문에서 사용할 수 있도록 하는 전혀 관련 없는 작업에도 사용되었다.

CP-V의 문자열은 문자의 배열로 공개적으로 나타나지 않았기 때문에 슬라이싱 구문은 배열 구문에 기반하지 않았다. 이는 CP-V가 문자열 배열 생성을 허용했다는 것을 의미하며, HP 및 아타리와 같은 방언은 슬라이싱에 배열 표기법을 사용했기 때문에 이 기능이 부족했다. 따라서 DIM을 사용하여 문자열 행렬을 만들 수 있었다.


```basic
10 DIM A$(5,10)
```


은 5x10 행렬에 총 50개의 72자 문자열을 포함하는 행렬을 정의한다. 시스템이 배열을 지원했기 때문에 슬라이싱 구문은 다른 버전에서 발견되는 시스템보다 다소 더 복잡했다. 예시는 다음과 같다.


```basic
A$(1)
```


은 문자열 배열에서 첫 번째 문자열을 선택하는 반면:


```basic
A$(1,5)
```


은 2D 배열(행렬)의 1,5 위치에서 문자열을 선택한다. 슬라이싱은 괄호 안에 콜론을 추가하여 처리되었다.


```basic
A$(:4)
```


은 네 번째 문자부터 뒤의 모든 것을 반환하고:


```basic
A$(:4,5)
```


은 네 번째 문자부터 시작하여 다섯 문자를 선택하는 반면:


```basic
A$(1,5:4,5)
```


은 2D 배열의 1,5 위치에 있는 문자열에서 네 번째 문자부터 시작하여 다섯 문자를 선택한다.

문자열 상수는 작은따옴표 또는 큰따옴표로 구분할 수 있어 줄 안에 따옴표를 쉽게 포함할 수 있었다. 유효한 예는 다음과 같다.


```basic
PRINT 'THIS IS A STRING LITERAL'
PRINT "THIS IS ANOTHER ONE"
PRINT 'AND THIS IS "A THIRD"'
PRINT "AND 'A FOURTH'"
```

CP-V에는 또한 다트머스 베이직의 CHANGE 명령이 포함되어 있으며, 이는 문자열을 일련의 확장 이진화 십진법 교환 부호 숫자 값으로 변환하여 숫자 배열에 배치한다.


```basic
10 DIM B(6)
20 CHANGE "ABCDEF" TO B
```


B는 이제 각 문자에 해당하는 EBCDIC 값의 일련의 숫자를 포함하게 된다.

## 입/출력
SDS는 PRINT 및 INPUT 문에서 지정할 수 있는 "스트림" 번호를 기반으로 하는 강력한 입/출력 시스템을 포함했다. 예를 들어, 파일을 사용하여 데이터를 읽을 수 있었다.


```basic
10 OPEN 'FILE1' TO :1,INPUT
20 INPUT :1,A
```


첫 번째 줄은 "FILE1"이라는 이름의 디스크 파일을 열고, 스트림 1에 할당하며, 입력을 위해 사용될 것임을 나타낸다. 두 번째 줄은 스트림 1에서 다음 데이터(이 경우 첫 번째 값)를 읽고, 결과 데이터를 변수 A에 할당한다. 이 시스템은 또한 데이터를 번호 매길 수 있고 무작위로 접근할 수 있는 고유한 "키" 시스템을 포함했다. 이는 세미콜론 뒤에 키 번호를 추가하여 이루어졌다.


```basic
INPUT :1;9999,A
```


는 레코드 9999를 읽으려고 시도한다. 유효한 키는 .001에서 9999.999 범위에 있었고, 파일에 키가 할당되지 않은 경우 줄은 1.000, 2.000 등으로 번호가 할당되었다. 파일에서 가장 높은 값의 키는 다음을 사용하여 읽을 수 있었다.


```basic
KEY(1)
```


여기서 1은 스트림 번호이다. 구조화되지 않은 이진 데이터는 GET 및 PUT을 사용하여 바이트 단위로 읽고 쓸 수 있었다.

## MAT 명령
다트머스 베이직의 후기 버전에는 단일 명령으로 전체 배열(행렬)에 대한 작업을 허용하는 `MAT` 명령 모음이 포함되었다. 이들도 SDS 베이직에서 사용 가능했다. 가장 간단한 형태에서 `MAT`은 `LET`의 대체 형태로 사용되어 배열의 모든 요소에 식을 적용한다. 예를 들어:

```basic
100 DIM A(20),B(20)
...
200 MAT A=A+B
```

는 A의 모든 항목에 B의 모든 값의 값을 추가하며, 다음과 같은 방식으로 작동한다.

```basic
100 DIM A(20),B(20)
...
200 FOR I=1 TO 20
210 A(I)=A(I)+B(I)
220 NEXT I
```

이러한 명령은 코드를 더 짧고 명확하게 만들 뿐만 아니라, 고도로 최적화되어 있어 FOR/NEXT 사용보다 훨씬 뛰어난 성능을 제공한다는 장점도 있다. 추가 함수 및 문은 `PRINT` 및 `INPUT`을 수정하고, 배열을 반전시키며, 항등 행렬 등을 단일 명령으로 구축한다.

## 내용주

## 각주
### 인용

### 참고 문헌
* 
* , Part No. 22687-90001

분류:베이직 프로그래밍 언어 계열
분류:베이직 컴파일러
분류:베이직