트리-메타
TREE-META| 원본 작성자 | 도널드 앤드루스, 제프 룰리프슨 |
|---|---|
| 초기 릴리즈 | 1968? |
TREE-META(또는 Tree Meta, TREEMETA) 번역기 쓰기 시스템은 1960년대에 개발된 문맥 없는 언어를 위한 컴파일러 컴파일러 시스템이다.금속구조의 구문 분석은 나무를 심는 지시문이 내장된 강화된 백커스-나우르 형태와 유사하다.해제[1] 규칙에는 광범위한 트리 스캔 및 코드 생성 구조가 포함된다.
역사
TREE-META는 oN-Line 시스템 개발에 중요한 역할을 하였으며 Univac 1108, GE 645, SDS-940, ICL 1906A, PERQ, UCSD p-시스템 등 많은 시스템에 포팅되었다.[2][3]
예
이것은 ICL 1900 TREE-META 매뉴얼의 부록 6의 더 완전한(선언서, 조건 및 블록) 예에서 추출(그리고 테스트되지 않은) TREE-META 프로그램의 완전한 예다.[4]또한 이 문서는 부록 3의 TREE-META에 TREE-META의 정의를 포함하고 있다.이 프로그램은 단순한 인식자가 아니라 입력에 대한 어셈블리 언어를 출력한다.트리 패턴 매칭인 TREE-META의 핵심 특징 중 하나를 보여준다.LHS(예: GET 및 VAL)와 RHS(ADD 및 SUB)에 모두 사용된다.
% 이 설명은 %로 구분된 ALGOL 형식의 설명임
%============================================================================= %.META PROG % 주행 규칙을 정의하는 프로그램이 필요하다.% 이 PROG 규칙은 전체 프로그램의 드라이버. % PROG = $STMT; % $는 0 이상 운영자. % PROG(프로그램)는 0 이상 STMT(상태)로 정의된다. % STMT = .ID ':=' AEXP :STORE[2]*; % 할당 문을 원본에서 트리로 구문 분석.% ':='는 문자열 상수로서, :STORE는 STORE 노드를 생성하며, % [2]는 이를 두 개의 분기(예: STORE[ID,AEXP])로 정의한다.% % * triggers a unparse of the tree, Starting with the last created % % tree i.e. the STORE[ID,AEXP] which is emitted as output and % % removed from the tree. % AEXP = FACTOR $('+' FACTOR :ADD[2] / '-' FACTOR :SUB[2]); % Here we have the recognizer for arithmetic '+' :ADD and '-' :SUB % % tree b우들딩다시 [2]는 2-branch ADD 또는 SUB 트리를 생성한다.% 전체 문장이 구문 분석될 때까지 언파싱이 지연됨.% ADD[팩터,팩터] 또는 SUB[팩터,팩터] % Factor = '-' PRIME :MINUSS[1] / PRIME ; PRIME = .ID / .NUM / '(' AEXP ')' ?3? ; % ?3? is a hint for error messages. % % ===================== OUTPUT UNPARSE RULES ===================== % STORE[-,-] => GET[*2] 'STORE ' *1 ; % *1 is the left tree branch.*2는 오른쪽 % % GET[*2]에서 로드할 코드를 생성한다. % 'STORE' 문자열이 % 출력된 후 왼쪽 분기 *1 % 기호 %%*2 무엇이든 GET[*2]에서 로드한다.ID] => 'LOAD' *1 / []Num] => LOADI ' *1 / [MINUSS[]NUM] => 'LOADN ' *1:*1 / [-] => *1 ; % 여기 입니다.ID 또는 .NUM은 간단히 로드된다.를 포함하는 MINUS 노드 %.NUM은 이것을 사용할 것이며, *1:*1이라는 표기법은 첫 번째 가지(a)의 %를 의미한다."NUM의 첫번째 지점의(MINUSS).%%또 다른 사람을 위해 전달 될 것이다 노드 인식%%unparse 규칙 deconstruct 나무 outputing 코드입니다.%ADD[-,-]=>, SIMP[*2]GET[*1]'ADD의 VAL[*2]/SIMP[*1]GET[*2]'ADD의 VAL[*1]/GET[*1]'STORE T+의<>OUT[A], A;-A+1>/. 얻다T+의<>'ADD[*2];A;-A-1, OUT[A]>;%Chevrons<>,%%로 예를 들어 산술 연산을 나타낸다를 만들고 A기본 주소 T.%SUB[-,-]=>, SIMP[*2]GET[*1]'SUB의 VAL[*2]/SIMP[*1]GET[*2]'NEGATE'%'ADD의 VAL[*1]/GET[*2]'STORE T+의<>OUT[A], A;-A에 상대적인 오프셋.+1>/GET[*1] 'SUB T+' < A<-A-1; OUT[A] >; % 구문 분석 규칙의 A% 문자는 새로운 줄을 나타낸다. % SIMP[]ID] => .비어 있음 / [.NUM] => .비어 있음 / [MINUSS[.NUM] => .비어 있음; VAL[.ID] => ' *1 / []NUM] => 'I ' *1 / [MINUSS[]NUM] => N ' *1:*1; MINUSS[-] => GET[*1] 'NEGATE' ; .끝
참고 항목
참조
- ^ 도날드 1세앤드류스, J. F. 룰리프슨(1967년).트리 메타(작업 초안): 캘리포니아 멘로 파크에 있는 스탠포드 연구소의 SDS 940용 메타 컴파일러.엥겔바트 컬렉션, 스탠포드 대학교 아카이브, M 638, 박스 16, 폴더 3.
- ^ 보울스, K. L. 1978.마이크로 및 미니 컴퓨터를 위한 A(거의) 기계 독립 소프트웨어 시스템.SIGMINI Newsl, 4(1), 3–7. doi:10.1145/1041256.1041257
- ^ Bowles, K. L. (May 1978). "UCSD Pascal: A (nearly) machine independent software system for micro and mini computers". Byte. Vol. 3, no. 5. pp. 46, 170–173 – via Internet Archive.
{{cite magazine}}: CS1 maint: 날짜 및 연도(링크) - ^ 홉굿, F. R. A. 1974년, "TREE-META 설명서", 아틀라스 컴퓨터 연구소.
- C. Stephen Carr, David A.루터, 셰리안 에르드만, TREE-META 컴파일러 컴파일러 시스템: Univac 1108 및 General Electric 645, University of Utah 기술 보고서 RADC-TR-69-83을 위한 메타 컴파일러 시스템.
- [1], 또한 [2] Tree Meta의 1968년 기술 보고서인 Englebart, Englebart, English 및 Rulifson은 현재 NLS에서 DSL(Domain Specific Language)이라고 부르는 특수 목적 언어(SPLs)를 사용한다.
- 도날드 1세앤드류스, J. F. 룰리프슨(1967년).트리 메타(작업 초안): 캘리포니아 멘로 파크에 있는 스탠포드 연구소의 SDS 940용 메타 컴파일러.엥겔바트 컬렉션, 스탠포드 대학교 아카이브, M 638, 박스 16, 폴더 3.
- AndrewS, LEHTMAN, WHP. "Tree Meta – Augmentation Research Center의 메타콤필러"예비안, 1971년 3월 25일.
- 앨런 C. 케이 반응형 엔진 박사 논문 1969 유타 대학교SRI(Engelbart) SDS-940의 TREE-META에서 앙리 구라우가 FLEX 컴파일러를 했다는 점에 유의하십시오.
- 아틀라스 컴퓨터 연구소 분기 보고서 (1975년 11월 21일), F. R. A.좋은 문서는 TRI-META를 사용하여 FR80 어셈블러 출력을 생성하는 컴파일러를 만든다.
- 아틀라스 컴퓨터 실험실 분기 보고서(1973년 10월 12일), C. J. 파벨린 문서(섹션 4.10) TREE-META가 1906A에 포팅되어 있다.
- TREE-META: W. M. Newman에 의한 Interdata 모델 4의 메타 컴파일러.런던 퀸 메리 칼리지1972년 11월.