stringtranslate.com

ÁRBOL-META

El sistema de escritura de traductores TREE-META (o Tree Meta , TREEMETA ) es un sistema compilador-compilador para lenguajes libres de contexto desarrollado originalmente en la década de 1960. Las sentencias de análisis del metalenguaje se asemejan a la forma Backus-Naur aumentada con directivas de construcción de árboles integradas. Las reglas de desanálisis [1] incluyen extensas construcciones de escaneo de árboles y generación de código.

Historia

TREE-META fue fundamental en el desarrollo de NLS (oN-Line System) y se adaptó a muchos sistemas, incluidos UNIVAC 1108 , GE 645 , SDS 940 , ICL 1906A , PERQ y UCSD p-System . [2] [3]

Ejemplo

Este es un ejemplo completo de un programa TREE-META extraído (y no probado) del ejemplo más completo (declaraciones, condicionales y bloques) del Apéndice 6 del manual TREE-META de ICL 1900. [4] Ese documento también tiene una definición de TREE-META en TREE-META en el Apéndice 3. Este programa no es solo un reconocedor, sino que también genera el lenguaje ensamblador para la entrada. Demuestra una de las características clave de TREE-META, que es la coincidencia de patrones de árbol. Se utiliza tanto en el LHS (GET y VAL, por ejemplo) como en el RHS (ADD y SUB).

% Este es un comentario de estilo ALGOL delimitado por %

% ====================== REGLAS DE ANÁLISIS DE ENTRADA ======================= %.METAPROG% Se requiere un programa que defina la regla de conducción.% Esta regla PROG es el controlador del programa completo.PROG = $STMT;% $ es el operador cero o más. %% PROG (el programa) se define como cero o más STMT (declaraciones). %STMT = .ID ':=' AEXP :STORE[2]*;% Analizar una declaración de asignación desde la fuente al árbol.% ':=' es una constante de cadena, :STORE crea un nodo STORE, %% [2] define esto como tener dos ramas, es decir, STORE[ID,AEXP]. %% * activa un análisis del árbol, comenzando con el último % creado% árbol, es decir, el STORE[ID,AEXP] que se emite como salida y %% eliminado del árbol. %AEXP = FACTOR $('+' FACTOR :ADD[2] / '-' FACTOR :SUB[2]);% Aquí tenemos el reconocedor para aritmética '+' :ADD y '-' :SUB %% construcción de árbol. Nuevamente, [2] crea un árbol ADD o SUB de 2 ramas. %El análisis se pospone hasta que se haya analizado una declaración completa.% AGREGAR[FACTOR,FACTOR] o SUB[FACTOR,FACTOR] %FACTOR = '-' PRIMO :MINUSS[1] / PRIMO ;PRIME = .ID / .NUM / '(' AEXP ')' ?3? ;% ?3? es una pista para mensajes de error. % % ====================== REGLAS DE ANÁLISIS DE SALIDA ===================== %TIENDA[-,-] => OBTENER[*2] 'TIENDA ' *1 ;% *1 es la rama izquierda del árbol. *2 es la derecha %% GET[*2] generará código para cargar *2. %% Se generará la cadena 'STORE'% seguido de la rama izquierda *1 un símbolo %% Cualquiera que sea *2, se cargará mediante GET[*2]. %GET[.ID] => 'CARGAR ' *1 / [.NUM] => ' CARGAR ' *1 / [MINUSS[.NUM]] => 'CARGAR' *1:*1 / [-] => *1 ;% Aquí simplemente se cargará un .ID o un .NUM. Un nodo MINUSS %Los % que contienen un .NUM tendrán esto utilizado, la notación *1:*1 significa %% la primera rama (un .NUM) de la primera rama (MINUSS). %% Cualquier otra cosa se transmitirá para el reconocimiento de nodos. %% Las reglas de desanálisis deconstruyen un árbol generando código.AGREGAR[-,-] => SIMP[*2] OBTENER[*1] 'AGREGAR' VAL[*2] / SIMP[*1] OBTENER[*2] 'AGREGAR' VAL[*1] / OBTENER[*1] 'ALMACENAR T+' < SALIR[A] ; A<-A+1 > / OBTENER[*2] 'AGREGAR T+' < A<-A-1 ; SALIR[A] > ;Los cheurones < > indican una operación aritmética, por ejemplo, %% genera un desplazamiento A relativo a una dirección base T. %SUB[-,-] => SIMP[*2] OBTENER[*1] 'SUB' VAL[*2] / SIMP[*1] OBTENER[*2] 'NEGAR' % 'AGREGAR' VAL[*1] / GET[*2] 'ALMACENAR T+' < OUT[A] ; A<-A+1 > / OBTENER[*1] 'SUB T+' < A<-A-1 ; SALIR[A] > ;% Un carácter de porcentaje en una regla de desanálisis indica una nueva línea.SIMP[.ID] => .VACÍO / [.NUM] => .VACÍO / [MINUSS[.NUM]] => .VACÍO;VAL[.ID] => ' ' *1 / [.NUM] => 'Yo ' *1 / [MENOS[.NUM]] => 'N ' *1:*1 ;MINUSS[-] => GET[*1] 'NEGAR' ;.FIN

Véase también

Referencias

  1. ^ Donald I. Andrews, JF Rulifson (1967). Tree Meta (Working Draft): A Meta Compiler for the SDS 940, Stanford Research Institute, Menlo Park, CA. Colección Engelbart, Archivo de la Universidad de Stanford, M 638, Caja 16, Carpeta 3.
  2. ^ Bowles, KL, 1978. Un sistema de software (casi) independiente de la máquina para micro y minicomputadoras. SIGMINI Newsl., 4(1), 3–7. doi :10.1145/1041256.1041257
  3. ^ Bowles, KL (mayo de 1978). "UCSD Pascal: Un sistema de software (casi) independiente de la máquina para micro y minicomputadoras". Byte . Vol. 3, núm. 5. págs. 46, 170–173 – vía Internet Archive.{{cite magazine}}: CS1 maint: date and year (link)
  4. ^ Hopgood, FRA 1974, "Manual TREE-META", Laboratorio de Computación Atlas.

Enlaces externos