fbpx
Wikipedia

Augus

Augus es un lenguaje de programación multiplataforma de mediano nivel, de código abierto e interpretado. Está basado en PHP y en MIPS. Su principal funcionalidad es ser un lenguaje intermedio, ni de alto nivel como PHP ni de bajo nivel como el lenguaje ensamblador de MIPS.

Augus
Desarrollador(es)
Universidad de San Carlos de Guatemala
Sitio web oficial
Información general
Extensiones comunes .aug
Paradigma imperativo
Apareció en 2020
Diseñado por Luis Espino
Última versión estable 0.1[1](20 de mayo de 2020 (1 año, 2 meses y 23 días))
Sistema de tipos Dinámico, débil
Influido por PHP, MIPS
Sistema operativo Multiplataforma
Licencia GNU GPL v3[2]

Nace por la necesidad de un código intermedio para fines académicos. Específicamente para ser utilizado en el curso de Compiladores 2[3]​ de la Universidad de San Carlos de Guatemala. El intérprete será construido en el mes de junio, próximamente se incluirá el enlace de descarga.

Características

El lenguaje tiene algunas restricciones:

  • Cada instrucción es una operación simple, correspondientes en su mayoría a las instrucciones de Assembler de MIPS
  • En cada instrucción hay un máximo de dos operandos y su asignación, por eso el 3A de Three Address.
  • En cuanto a los registros PHP y MIPS comparten la definición de registros o variables anteponiendo el símbolo $.

Es un lenguaje débilmente tipado, sin embargo, si se reconocen cuatro tipos de datos no explícitos: entero, punto flotante, cadena de caracteres y arreglo.

Para manejar el flujo de control se proporciona la declaración de etiquetas y la instrucción goto.

Registros, Augus utiliza registros similares a los de MIPS[4]​:

  • $t0..$tn: temporales
  • $a0..$an: parámetros
  • $v0: valor devuelto en función
  • $ra: simulador de dirección de retorno mediante nivel de ejecución
  • $s0..$sn: pila
  • $sp: puntero de pila

Sintaxis

Instrucciones simples y unarias

Instrucción Descripción
main: Inicio del programa.
label: Definición del inicio de una etiqueta.
goto label: Salto incondicional hacia una etiqueta.
$t1 = 10; Asignación numérica.
$t1 = 'hola'; Asignación de una cadena de caracteres.
$t1 = $t2; Copia simple.
$t1 = - $t2; Negativo.
$t1 = &t2; $t1 es un puntero a la dirección de $t2.
unset($t1); Destruye la variable $t1.
print($t1); Imprime en pantalla el contenido de $t1.
$t1 = read(); Lee la entrada del teclado queda en $t1.
#comment Comentario de una sola línea.
exit; Finaliza la ejecución (es opcional).

Instrucciones aritméticas

Instrucción Descripción
$t1 = $t2 + $t3; Suma.
$t1 = $t2 - $t3; Resta.
$t1 = $t2 * $t3; Multiplicación.
$t1 = $t2 / $t3; División.
$t1 = $t2 % $t3 Residuo.
$t1 = abs($t2); Valor absoluto.

Instrucciones lógicas

Instrucción Descripción
$t1 = !$t2; Not, si $t2 es 0 $t1 es 1, si $t2 es 1 $t1 es 0.
$t1 = $t2 && $t3; And, 1 para verdadero, 0 para falso.
$t1 = $t2 || $t3; Or, 1 para verdadero, 0 para falso.
$t1 = $t2 xor $t3; Xor, 1 para verdadero, 0 para falso.

Instrucciones bit a bit

Instrucción Descripción
$t1 = ~$t2; Not.
$t1 = $t2 & $t3; And.
$t1 = $t2 | $t3; Or.
$t1 = $t2 ^ $t3; Xor.
$t1 = $t2 << $t3; Shift de $t2, $t3 pasos a la izquierda.
$t1 = $t2 >> $t3; Shift de $t2, $t3 pasos a la derecha.

Instrucciones relacionales

Instrucción Descripción
$t1 = $t2 == $t3; $t1 = 1 si $t2 es igual a $t3, sino 0.
$t1 = $t2 != $t3; $t1 = 1 si $t2 no es igual a $t3, sino 0.
$t1 = $t2 >= $t3; $t1 = 1 si $t2 es mayor o igual a $t3, sino 0.
$t1 = $t2 <= $t3; $t1 = 1 si $t2 es menor o igual a $t3, sino 0.
$t1 = $t2 > $t3; $t1 = 1 si $t2 es mayor a $t3, sino 0.
$t1 = $t2 < $t3; $t1 = 1 si $t2 es menor a $t3, sino 0.

Arreglos, cadenas y estructuras

Hay dos tipos de arreglos:

  • El numérico funciona como los arreglos convencionales, por ejemplo, asignar en el índice 4 del arreglo el valor uno: $t1[4] = 1;.
  • El asociativo funciona como un struct de C, o como una clase en C++ (solo datos), por ejemplo, $t1 es el registro con dos componentes uno llamado nombre de tipo cadena y otro llamado edad de tipo numérico: $t2['nombre'] = 'Carlos'; $t2['edad'] = 20;

Las cadenas de caracteres también son considerados arreglos.

Instrucción Descripción
$t1 = array(); Define $t1 como un arreglo o un struct, para diferenciarlos se utiliza ya sea el valor numérico o el nombre asociativo.
$t1[4] = 1; Asignación de un valor numérico (1) a un índice del arreglo (4).
$t1['nombre'] = 'Carlos'; Asignación de un valor cadena (Carlos) a un componente del struct (nombre).
$t1 = $t1[4]; Acceso a un índice del arreglo.
$t1 = $t2['nombre']; Acceso a un componente del struct.
$t1 = 'hola';

print($t1[0]); #imprime h

Acceder a un carácter de una cadena.

Instrucciones de control

Instrucción Descripción
if ($t1) goto label; Salto condicional, si $t1 es 1 salto, sino sigue la siguiente instrucción, $t1 puede ser relacional. Las estructuras de control se implementan utilizando este salto condicional.


Funciones y procedimientos

La diferencia entre una función y un procedimiento radica en que si trae o no un valor de retorno. Dicho valor se tomará con el registro $v0, si hay llamadas a otras funciones se incrementará el índice de dicho registro, simulando el uso del STACK.

En vez de utilizar los conocidos CALL y RETURN, se utilizarán los registros de parámetros y el de valor de retorno, junto con los GOTO para simular la llamada como se hace en MIPS con jal y jr.[5]

Programación

Ejemplo 1

Ejemplo de un while escrito en lenguaje C:

int main() { int x = 0; int a = 0; while(x<4) { a = a + x; x = x + 1; } printf("%d",a); } 

Código equivalente en Augus:

main: $t1 = 0; $t2 = 0; while: if ($t1>=4) goto end; $t2 = $t2 + $t1; $t1 = $t1 + 1; goto while; end: print($t2); 

Ejemplo 2

Ejemplo de una función con llamada a otra función escrita en lenguaje C:

int f1(int a) { return f2(a); } int f2(int a) { return a*a; } int main() { int a = 5; a = f1(a); printf("%d",a); } 

Código equivalente en Augus:

main: $a0 = 5; goto f1; ret0: print($v0); exit; f1: $a1 = $a0; goto f2; ret1: $v0 = $v1; goto ret0; f2: $v1 = $a1*$a1; goto ret1; 

Ejemplo 3

Ejemplo de la función factorial recursiva escrita en lenguaje C:

int fact(int a) { if (a<=1) return 1; else return a*fact(a-1); } int main() { printf("%d",fact(3)); } 

Código equivalente en Augus:

main: $a0 = 3; $ra = 0; #level 0 goto fact; ret0: print($v0); exit; fact: if ($a0>1) goto sino; $v0 = 1; if ($ra==0) goto ret0; $ra = $ra - 1; goto ret1; sino: $a0 = $a0 - 1; $ra = $ra + 1; #level ++ goto fact; ret1: $a0 = $a0 + 1; $v0 = $a0 * $v0; if ($ra==0) goto ret0; $ra = $ra - 1; goto ret1; 


Véase también

Referencias

  1. «Augus/version». GitHub. Consultado el 27 de mayo de 2020. 
  2. «Augus/LICENSE at master». GitHub. Consultado el 27 de mayo de 2020. 
  3. Curso de Compiladores 2, Universidad de San Carlos de Guatemala, Primer Semestre 2020.
  4. Patterson & Hennessy - Apéndice A (PDF), Página A-24 Figura A.6.1.
  5. Lectura No. 5 (PDF), Universidad de Washington, CSE378: Machine Organization & Assembly Language.

Enlaces externos

  • Página web oficial
  • Programmed Introduction to MIPS Assembly Language, Central Connecticut State University
  • Tuple-Based Intermediate Representations, Loyola Marymount University
  •   Datos: Q95662726

augus, lenguaje, programación, multiplataforma, mediano, nivel, código, abierto, interpretado, está, basado, mips, principal, funcionalidad, lenguaje, intermedio, alto, nivel, como, bajo, nivel, como, lenguaje, ensamblador, mips, desarrollador, universidad, ca. Augus es un lenguaje de programacion multiplataforma de mediano nivel de codigo abierto e interpretado Esta basado en PHP y en MIPS Su principal funcionalidad es ser un lenguaje intermedio ni de alto nivel como PHP ni de bajo nivel como el lenguaje ensamblador de MIPS AugusDesarrollador es Universidad de San Carlos de GuatemalaSitio web oficialInformacion generalExtensiones comunes augParadigmaimperativoAparecio en2020Disenado porLuis EspinoUltima version estable0 1 1 20 de mayo de 2020 1 ano 2 meses y 23 dias Sistema de tiposDinamico debilInfluido porPHP MIPSSistema operativoMultiplataformaLicenciaGNU GPL v3 2 editar datos en Wikidata Nace por la necesidad de un codigo intermedio para fines academicos Especificamente para ser utilizado en el curso de Compiladores 2 3 de la Universidad de San Carlos de Guatemala El interprete sera construido en el mes de junio proximamente se incluira el enlace de descarga Indice 1 Caracteristicas 2 Sintaxis 2 1 Instrucciones simples y unarias 2 2 Instrucciones aritmeticas 2 3 Instrucciones logicas 2 4 Instrucciones bit a bit 2 5 Instrucciones relacionales 2 6 Arreglos cadenas y estructuras 2 7 Instrucciones de control 2 8 Funciones y procedimientos 3 Programacion 3 1 Ejemplo 1 3 2 Ejemplo 2 3 3 Ejemplo 3 4 Vease tambien 5 Referencias 6 Enlaces externosCaracteristicas EditarEl lenguaje tiene algunas restricciones Cada instruccion es una operacion simple correspondientes en su mayoria a las instrucciones de Assembler de MIPS En cada instruccion hay un maximo de dos operandos y su asignacion por eso el 3A de Three Address En cuanto a los registros PHP y MIPS comparten la definicion de registros o variables anteponiendo el simbolo Es un lenguaje debilmente tipado sin embargo si se reconocen cuatro tipos de datos no explicitos entero punto flotante cadena de caracteres y arreglo Para manejar el flujo de control se proporciona la declaracion de etiquetas y la instruccion goto Registros Augus utiliza registros similares a los de MIPS 4 t0 tn temporales a0 an parametros v0 valor devuelto en funcion ra simulador de direccion de retorno mediante nivel de ejecucion s0 sn pila sp puntero de pilaSintaxis EditarInstrucciones simples y unarias Editar Instruccion Descripcionmain Inicio del programa label Definicion del inicio de una etiqueta goto label Salto incondicional hacia una etiqueta t1 10 Asignacion numerica t1 hola Asignacion de una cadena de caracteres t1 t2 Copia simple t1 t2 Negativo t1 amp t2 t1 es un puntero a la direccion de t2 unset t1 Destruye la variable t1 print t1 Imprime en pantalla el contenido de t1 t1 read Lee la entrada del teclado queda en t1 comment Comentario de una sola linea exit Finaliza la ejecucion es opcional Instrucciones aritmeticas Editar Instruccion Descripcion t1 t2 t3 Suma t1 t2 t3 Resta t1 t2 t3 Multiplicacion t1 t2 t3 Division t1 t2 t3 Residuo t1 abs t2 Valor absoluto Instrucciones logicas Editar Instruccion Descripcion t1 t2 Not si t2 es 0 t1 es 1 si t2 es 1 t1 es 0 t1 t2 amp amp t3 And 1 para verdadero 0 para falso t1 t2 t3 Or 1 para verdadero 0 para falso t1 t2 xor t3 Xor 1 para verdadero 0 para falso Instrucciones bit a bit Editar Instruccion Descripcion t1 t2 Not t1 t2 amp t3 And t1 t2 t3 Or t1 t2 t3 Xor t1 t2 lt lt t3 Shift de t2 t3 pasos a la izquierda t1 t2 gt gt t3 Shift de t2 t3 pasos a la derecha Instrucciones relacionales Editar Instruccion Descripcion t1 t2 t3 t1 1 si t2 es igual a t3 sino 0 t1 t2 t3 t1 1 si t2 no es igual a t3 sino 0 t1 t2 gt t3 t1 1 si t2 es mayor o igual a t3 sino 0 t1 t2 lt t3 t1 1 si t2 es menor o igual a t3 sino 0 t1 t2 gt t3 t1 1 si t2 es mayor a t3 sino 0 t1 t2 lt t3 t1 1 si t2 es menor a t3 sino 0 Arreglos cadenas y estructuras Editar Hay dos tipos de arreglos El numerico funciona como los arreglos convencionales por ejemplo asignar en el indice 4 del arreglo el valor uno t1 4 1 El asociativo funciona como un struct de C o como una clase en C solo datos por ejemplo t1 es el registro con dos componentes uno llamado nombre de tipo cadena y otro llamado edad de tipo numerico t2 nombre Carlos t2 edad 20 Las cadenas de caracteres tambien son considerados arreglos Instruccion Descripcion t1 array Define t1 como un arreglo o un struct para diferenciarlos se utiliza ya sea el valor numerico o el nombre asociativo t1 4 1 Asignacion de un valor numerico 1 a un indice del arreglo 4 t1 nombre Carlos Asignacion de un valor cadena Carlos a un componente del struct nombre t1 t1 4 Acceso a un indice del arreglo t1 t2 nombre Acceso a un componente del struct t1 hola print t1 0 imprime h Acceder a un caracter de una cadena Instrucciones de control Editar Instruccion Descripcionif t1 goto label Salto condicional si t1 es 1 salto sino sigue la siguiente instruccion t1 puede ser relacional Las estructuras de control se implementan utilizando este salto condicional Funciones y procedimientos Editar La diferencia entre una funcion y un procedimiento radica en que si trae o no un valor de retorno Dicho valor se tomara con el registro v0 si hay llamadas a otras funciones se incrementara el indice de dicho registro simulando el uso del STACK En vez de utilizar los conocidos CALL y RETURN se utilizaran los registros de parametros y el de valor de retorno junto con los GOTO para simular la llamada como se hace en MIPS con jal y jr 5 Programacion EditarEjemplo 1 Editar Ejemplo de un while escrito en lenguaje C int main int x 0 int a 0 while x lt 4 a a x x x 1 printf d a Codigo equivalente en Augus main t1 0 t2 0 while if t1 gt 4 goto end t2 t2 t1 t1 t1 1 goto while end print t2 Ejemplo 2 Editar Ejemplo de una funcion con llamada a otra funcion escrita en lenguaje C int f1 int a return f2 a int f2 int a return a a int main int a 5 a f1 a printf d a Codigo equivalente en Augus main a0 5 goto f1 ret0 print v0 exit f1 a1 a0 goto f2 ret1 v0 v1 goto ret0 f2 v1 a1 a1 goto ret1 Ejemplo 3 Editar Ejemplo de la funcion factorial recursiva escrita en lenguaje C int fact int a if a lt 1 return 1 else return a fact a 1 int main printf d fact 3 Codigo equivalente en Augus main a0 3 ra 0 level 0 goto fact ret0 print v0 exit fact if a0 gt 1 goto sino v0 1 if ra 0 goto ret0 ra ra 1 goto ret1 sino a0 a0 1 ra ra 1 level goto fact ret1 a0 a0 1 v0 a0 v0 if ra 0 goto ret0 ra ra 1 goto ret1 Vease tambien EditarPHP Assembler de MIPS Codigo de tres direcciones Lenguaje intermedioReferencias Editar Augus version GitHub Consultado el 27 de mayo de 2020 Augus LICENSE at master GitHub Consultado el 27 de mayo de 2020 Curso de Compiladores 2 Universidad de San Carlos de Guatemala Primer Semestre 2020 Patterson amp Hennessy Apendice A PDF Pagina A 24 Figura A 6 1 Lectura No 5 PDF Universidad de Washington CSE378 Machine Organization amp Assembly Language Enlaces externos EditarPagina web oficial Programmed Introduction to MIPS Assembly Language Central Connecticut State University Tuple Based Intermediate Representations Loyola Marymount University Datos Q95662726Obtenido de https es wikipedia org w index php title Augus amp oldid 134245023, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos