TTM(프로그래밍 언어)

TTM (programming language)
TTM
패러다임범용 매크로 프로세서
설계자스티븐 M. 케인과 E.켄트 고든
처음 등장한1968
안정된 릴리스
1.0
면허증.MIT
주요 구현
유니다타 TTM
영향을 받다
GAP, GPM, TRAC

TTM은 1968년 Steven Caine과 E에 의해 개발된 문자열 지향 범용 매크로 프로세싱 프로그래밍 언어입니다.캘리포니아 공과대학의 켄트 고든입니다

묘사

다음 설명은 원래 TTM 참조[1] 매뉴얼과 후속 배치 처리 [2]확장에서 인용한 것입니다.

TTM은 주로 문자열 조작, 텍스트 편집, 매크로 정의 및 확장 및 일반적으로 시스템 프로그래밍으로 분류되는 기타 애플리케이션을 위해 설계된 재귀적이고 해석적인 언어입니다.주로 GAP 및 [4]GPM에서 파생됩니다[3].

처음에 TTM은 IBM System/360용 어셈블러의 매크로 처리 부분으로 계획되었으며, 따라서 해당 시스템의 [5][6]표준 어셈블러에 존재하는 제한과 불일치를 극복하기 위해 설계되었습니다.

또한 이전의 일반적인 매크로 어셈블러가 가진 모든 힘을 가지도록 설계되었지만 통사적 및 의미적 어려움은 [7][8][9][10]제거되었습니다.

TTM의 개발 과정에서 어셈블러 매크로 처리 이외의 어플리케이션이 가능함을 알 수 있었습니다.여기에는 어셈블러 이외의 언어 프로세서에 대한 데이터 편집, 텍스트 조작, 식 컴파일 및 매크로 처리가 포함됩니다.

TTM의 초기 버전은 IBM System/360 Model [11]50용 Caltech Basic Time Sharing System에서 대화 방식으로 실행되도록 구현되었습니다.그 외의 버전은, OS/360 의 배치 처리 환경에서 동작해, 다양한 언어 프로세서의 전면 또는 그 조합으로 동작하도록 기술되어 있습니다.

구문 및 의미론

참조 실장에서는, TTM 에 통상의 텍스트와 TTM 함수 콜의 몇개의 편성을 포함한 텍스트파일이 주어지는 것을 전제로 하고 있습니다(즉, 호출).텍스트는 한 글자씩 스캔됩니다.일반 텍스트는 변경되지 않고 출력으로 전달됩니다(탈옥 제외).TTM 함수가 발견되면 해당 함수가 수집되어 있습니다.

TTM 함수 호출의 일반적인 형식은 다음과 같습니다.

#< 함수명; 기능명; 기능명; 기능명; 기능명 2;...argn>

여기서 함수 이름과 인수는 중요한 문자를 포함하지 않는 임의의 문자열입니다. '#', '<', '>', ';'함수는 지정된 인수를 사용하여 호출되며 결과 텍스트는 함수 호출 대신 원래 텍스트에 삽입됩니다.함수 호출 앞에 단일 '#' 문자가 붙어 있는 경우 함수 호출에서 삽입된 텍스트 직전에 검색이 재개됩니다.

이것을 액티브 호출이라고 부릅니다.

함수 호출 앞에 2개의 '#'자가 붙어 있는 경우 삽입된 텍스트 직후에 스캔이 재개됩니다.이를 패시브 호출이라고 합니다.

함수 호출 수집 중에 예를 들어 다음과 같은 추가 함수 호출이 발생할 수 있습니다.

# < functionname ; function1 ; # < f2 ; finction ;>;...;argn>

중첩된 함수 호출은 외부 함수 호출의 텍스트에 결과가 삽입되고 중첩된 호출 앞에 있는 '#' 문자의 숫자로 표시된 위치에서 외부 함수 호출의 스캔이 재개되면 호출됩니다.

예를 들어, 함수가 2개의 인수를 사용하는 경우 추가 인수는 무시됩니다.사용자 정의 함수의 경우 지정된 인수가 너무 적은 경우 빈 문자열("") 값으로 추가되는 인수는 최대 62개입니다.

다른 응용 프로그램 언어와 마찬가지로 TTM 함수는 재귀적일 수 있으며 다른 함수 호출 시퀀스의 호출 결과로 정의될 수 있습니다.

함수는 빌트인 또는 사용자 정의 중 하나입니다.TTM 레퍼런스[1] 매뉴얼에 정의되어 있는 다수의 임베디드 기능이 있습니다.

함수 정의

사용자 정의 함수는 다음 두 가지 내장 함수를 사용하여 생성됩니다.

  • # <ds;name;텍스트>
  • # <ss;name;text1;text2...;textn>

첫 번째 함수인 "define string"의 ds는 TTM 딕셔너리에서 명명된 문자열을 정의합니다.이름은 "name"이고 값은 "text"입니다.이 명명된 문자열을 호출하면 호출이 값(예: "텍스트")으로 대체됩니다.

두 번째 함수 ss는 "segment string"의 경우 이전에 정의된 문자열의 텍스트를 검색하여 인수 text1, text2, ... textn의 발생을 찾습니다.발생이 발견되면 세그먼트 표시로 대체됩니다.각 인수의 모든 항목은 동일한 세그먼트마크로 대체됩니다.

세그먼트 스트링이 호출되면 콜에 대한 각 인수가 대응하는 세그먼트마크 대신 사용됩니다.이 예를 들어 보겠습니다.

[01] #<ds;F;abcxxdefyy> [02] # <ss;F;xx;yy> [03] # <F;11;22>

문자열 F는 정의되어 있으며(행 1), 본문 'abcxxdefyy'는 2개의 문자열 'xx'와 'yy'(행 2)로 분할되어 있습니다.호출되면(행 3), 값 "abc11def22"가 반환됩니다.실제로는 2개의 인수를 가진 사용자 정의 함수 F가 있습니다.

이스케이프

두 가지 규칙 중 하나를 사용하여 하나 이상의 문자를 이스케이프할 수 있습니다.

  1. <...> – 여러 문자를 이스케이프합니다.
  2. @ – 단일 문자 이스케이프

문자열이 <...>에 포함되어 있으면 스캔되지만 TTM에 의해 해석되지 않습니다.스캔 프로세스에서는, 바깥쪽< 및 >브래킷을 떼어냅니다.<...>가 중첩되어 있는 경우는, 스캔 됩니다만,< 및 >는 삭제되지 않습니다.대괄호는 균형을 맞춰야 합니다.<' 문자 수는 '>' 문자 수와 같아야 합니다.

'@' 이스케이프 규칙을 사용하면 인터프리터는 '@' 뒤에 있는 문자를 그대로 전달합니다.선두의 「@」는,<...」내에 있으면 남습니다.> 이스케이프 시퀀스.그렇지 않으면 삭제됩니다.한 가지 용도는 '<' 또는 '>' 문자의 불균형 발생을 허용하는 것입니다.

예 1: 함수의 정의

가장 기본적인 예에서는 추가 함수를 정의하는 데 유용한 함수를 정의합니다.이 "메타" 함수를 def라고 합니다.다음과 같이 기술되어 있습니다.

#<ds;def;<#<ds;name;<text>;##<ss;name;text>>#<ss;def;name;text>

예를 들어 def를 사용하여 문자열 XX를 12345로 정의하고 XX를 34로 세그먼트화할 수 있습니다.

# <def;XX;34;12345>

# <XX;0000>

그러면 문자열 "clos005"가 생성됩니다.

def 함수는 ds를 호출하여 TTM 딕셔너리의 함수 이름과 첫 번째 텍스트를 정의함으로써 동작합니다(이 예에서는 XX).

그러면 XX 사전 엔트리의 텍스트는 지정된 인수(이 경우 "34")에 대해 분할됩니다.

XX가 호출되면 그 인수가 세그먼트마크 대신 사용됩니다.

예 2: 요인

요인 함수는 (위의 ##<def> 함수를 사용하여) 다음과 같이 정의할 수 있습니다.

#<def;n!;N;<#<N;2;1;<#<mu;N;#<n!;#<su;N;1>>>

내부 계산(#<mu...)은 이스케이프되므로 #<<mu...) 뒤에만 평가됩니다.함수가 실행되고 그 결과로 중첩된 계산이 반환됩니다.

콜의 예는 다음과 같습니다.

# <n!;3>

문자열 6을 반환합니다.

「 」를 참조해 주세요.

TTM과 TRAC의 정확한 관계는 불명확합니다.TTM 문서에는 GAP 및 [4]GPM에서[3] 파생된 것이 기재되어 있습니다.어느 경우든 TRAC의 특성에 대한 설명은 TTM에도 적용됩니다.그러나 임베디드 함수와 사용자 정의 함수의 구문적 구분을 없애면 TTM이 훨씬 깨끗한 언어로 보입니다.

메모들

  1. ^ a b Caine, S. H.; Gordon, E.K. (1968). "TTM: An Experimental Interpretive Language" (PDF). California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 7.
  2. ^ Caine, S. H.; Gordon, E. K. (May 1969). "TTM: A Macro Language for Batch Processing" (PDF). California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 8.
  3. ^ a b Farber, D. J., 635 조립 시스템 - GAP. Bell Telephone Laboraties Computation Center(1964).
  4. ^ a b Stracey, C. 범용 매크로 생성기.계산 J 8, 3(1965), 페이지 225-241.
  5. ^ IBM, System/360 Assembler Language, C28-6514-4, (1967).
  6. ^ Caine, S.H. 등, 시스템 목표 및 요건 위원회의 보고서, SHARE, 1965, 페이지 29-40.
  7. ^ SAP의 매크로 컴파일러 수정(Eastwood, D.E. 및 McIlroy, M.D.)1959년 벨 전화 연구소 앰퓨테이션 센터
  8. ^ McClure, R.M., Description of CODAPT Assembler, 1960.
  9. ^ Caine, S.H., CIT 7090/7040 Experimental Macro Assembly Program(XMAP) 참조 매뉴얼.캘리포니아 공과대학, Willis H. Booth Computing Center(1964).
  10. ^ McIlroy, M.D., 컴파일러 언어의 매크로 명령 확장.CACM 3, No.4(1960), 214-220
  11. ^ Caine, S.H. 등, 프로그래밍 연구를 위한 운영 환경.캘리포니아 공과대학, Willis H. Booth Computing Center Programming Report No.1, 1967.

레퍼런스

  • Greenwald, I.D. 및 Kane, M. Share 709 System:프로그래밍 및 수정.JACM 6 No. 2 (1959) 페이지 128–133.
  • 그린월드, 신분증 매크로 명령 처리CACM 2, No. 11(1959), 21-22
  • 레밍턴 랜드 UNIVAC 부문, UNIVAC Generalized Programming.필라델피아, 1957년
  • McIlroy, M.D., SAP 매크로 명령을 사용하여 심볼식을 조작합니다.Bell Telephone Laboraties Computation Center(1960).

외부 링크