Augus

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 (4 años, 5 meses y 10 días))
Sistema de tipos Dinámico, débil
Influido por PHP, MIPS
Sistema operativo Multiplataforma
Licencia GNU GPL v3[2]

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.

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

Read other articles:

Street in Kazan, Russia This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Pushkin Street, Kazan – news · newspapers · books · scholar · JSTOR (December 2009) (Learn how and when to remove this template message) Pushkin Street Pushkin Street (Russian: улица Пушкина; Tatar: Пушкин урамы, romanized: Pu�...

Monte San Giorgio *  Patrimoine mondial de l'UNESCO Le Pachypleurosaurus, un fossile qui a été découvert au Monte San Giorgio. Coordonnées 45° 55′ nord, 8° 57′ est Pays Suisse Italie Subdivision Canton du Tessin (Suisse)Province de Varèse (Italie) Type Naturel Critères (viii) Superficie 1 089 ha Zone tampon 3 207 ha Numérod’identification 1090 Région Europe et Amérique du Nord ** Année d’inscription 2003 (27e session)...

В Википедии есть статьи о других людях с именем Ростом. Ростомгруз. როსტომი Царь Картли 1633 — 1658 Предшественник Симон II Преемник Вахтанг V Царь Картли-Кахети 1648 — 1656 Предшественник Иессей Преемник Арчил II Рождение 1565(1565)Исфахан, Персия Смерть 17 ноября 1658(1658-11-17)Кум,

American politician This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Anson G. McCook – news · newspapers · books · scholar · JSTOR (September 2022) (Learn how and when to remove this template message) Anson George McCook9th Secretary of the United States SenateIn officeDecember 18, 1883 – August 7,...

Als Bisexualität (nach der lateinischen Vorsilbe bi- für zwei) bezeichnet man die sexuelle Orientierung, sich zu zwei Geschlechtern emotional oder sexuell hingezogen zu fühlen.[1][2] Als Kurzform ist das Adjektiv bi gebräuchlich. Bisexualität gehört mit weiteren Orientierungen wie der Pansexualität zu den nicht-monosexuellen Orientierungen.[3] Inhaltsverzeichnis 1 Begriffswandel 2 Wissenschaftliche Untersuchungen in westlichen Industrieländern 3 Bisexualität i...

Dieser Artikel oder Absatz stellt die Situation in Deutschland dar. Bitte hilf uns dabei, die Situation in anderen Staaten zu schildern. Die Sinologie, auch als Chinawissenschaften oder Chinakunde (chinesisch 漢學 / 汉学, Pinyin hànxué – „Han-Kunde“) bekannt, ist ein Fachgebiet der Sprach- und Kulturwissenschaften, das im 16. Jahrhundert entstand, und sich mit den Sprachen, Schrift, Politik, Gesellschaft, Philosophie, Literatur, Wirtschaft und Geschichte d...

Pretender to the French throne Jean d'OrléansCount of ParisOrléanist pretender to the French throneas Jean IVTenure21 January 2019 – presentPredecessorHenri VIIHeir apparentGaston, Dauphin of FranceBorn (1965-05-19) 19 May 1965 (age 58)Boulogne-Billancourt, FranceSpouse Philomena de Tornos Steinhart ​ ​(m. 2009)​Issue Prince Gaston, Count of Clermont Princess Antoinette Princess Louise-Marguerite Prince Joseph Princess Jacinthe NamesJean Carl Pierre...

Дражен Ладич Особисті дані Народження 1 січня 1963(1963-01-01) (60 років)   Чаковець, Югославія Зріст 185 см Вага 84 кг Громадянство  Хорватія Позиція воротар Професіональні клуби* Роки Клуб Ігри (голи) 1983—19841984—19861986—2000 Вартекс ВараждинІскра БугойноДинамо Загреб 15 (0)42 (5)363 (1) Нац...

A warning system in Ukraine Ukraine Siren AlertsDeveloper(s)Bernard MoerdlerInitial releaseMarch 1, 2022Stable release4.0 / Nov 27, 2022 PlatformTwitter, Telegram, Facebook, SMS, emailAvailable inEnglish, UkrainianTypeEmergency notification systemWebsitehttps://uasa.io Ukraine Siren Alerts (UASA) is a siren alert electronic system created by Israeli student Bernard 'Boaz' Moerdler.[1] [2] The system automatically alerts users of sirens in Ukraine using data from municipal and ...

Indian television channel Television channel Bindass PlayCountryIndiaBroadcast areaIndiaHeadquartersMumbai, IndiaProgrammingLanguage(s)HindiPicture format576i (4:3 SDTV)OwnershipOwnerDisney India Media NetworksSister channelsBindassDisney Channel (India)Disney Junior (India)Disney XD (India)Hungama TVUTV MoviesUTV ActionHistoryLaunched19 August 2011; 12 years ago (2011-08-19)ReplacedUTV StarsClosed29 October 2017; 6 years ago (2017-10-29)Replaced byDisney I...

Penggemar di resital di Buenos Aires, Argentina Penggemar membawa poster untuk mendukung idola mereka. Penggemar atau peminat (Inggris: fan atau enthusiast), disebut juga pendukung (supporter) untuk regu olahraga, adalah seseorang yang menggemari sesuatu dengan antusias, seperti grup musik, regu olahraga, buku, atau selebriti. Secara kolektif, kumpulan pengemar akan membentuk pangkalan penggemar (fanbase) atau kepenggemaran (fandom). Para penggemar ini menunjukkan antusiasme mereka dengan ber...

For his son, the English traveller, writer, diarist, landowner and MP, see Philip Skippon (1641–1691). Philip Skippon Philip Skippon (c. 1600, West Lexham, Norfolk – c. 20 February 1660) supported the Parliamentary cause during the English Civil War as a senior officer in the New Model Army. Prior to the war he fought in the religious wars on the continent. During the Interregnum he was a member of Parliament, an active soldier and on occasions a government administrator.[1][2...

This article needs to be updated. Please help update this article to reflect recent events or newly available information. (July 2021) Television station in New Mexico, United StatesKTEL-CD / KTEL-TVAlbuquerque–Carlsbad, New MexicoUnited StatesChannelsDigital: See tableBrandingTelemundo Nuevo MéxicoProgrammingAffiliationsTelemundoOwnershipOwnerTelemundo Station Group(Comcast/NBCUniversal)(NBC Telemundo License LLC)Sister stationsKASA-TV, KRTN-LD, KUPT-LDHistoryFoundedNovember 28, 1994First...

The periplasm is a concentrated gel-like matrix in the space between the inner cytoplasmic membrane and the bacterial outer membrane called the periplasmic space in gram-negative (more accurately diderm) bacteria. Using cryo-electron microscopy it has been found that a much smaller periplasmic space is also present in gram-positive bacteria (more accurately monoderm), between cell wall and the plasma membrane.[1][2] The periplasm may constitute up to 40% of the total cell volu...

2001 Talladega 500 Race details[1][2] Race 9 of 36 in the 2001 NASCAR Winston Cup Series season Map of the Talladega SuperspeedwayDate April 22, 2001 (2001-April-22)Official name Talladega 500Location Talladega Superspeedway, Talladega, AlabamaCourse Permanent racing facility2.660 mi (4.280 km)Distance 188 laps, 500.1 mi (804.8 km)Weather Temperatures of 57.9 °F (14.4 °C) and 82.9 °F (28.3 °C); Wind speeds of 11.1 miles per hour (17.9...

Skycraper in Jakarta, Indonesia Bakrie TowerGeneral informationStatusCompletedTypeCommercialLocationJakarta, IndonesiaOpening2009HeightRoof702 ft (214 m)Technical detailsFloor count50Design and constructionArchitect(s)HOK (firm)Main contractorPT. Hutama Karya (Persero) Bakrie Tower is a skyscraper in Jakarta, Indonesia. The 50-story building was completed in 2009, construction having begun in 2006.[1] See also Indonesia portalJakarta portal Skyscraper design and construction...

أكاديمية أخبار اليوم شعار أكاديمية أخبار اليوم معلومات التأسيس 16 مايو 1999 (منذ 24 سنة) النوع معاهد خاصة المعاهد هندسة وحاسبات ومعلومات وإعلام وتجارة الموقع الجغرافي الرمز البريدي [email protected] المكان مدينة السادس من أكتوبر محافظة الجيزة البلد  مصر رقم الهاتف 20238347121 ، 202383...

Paghimo ni bot Lsjbot. Alang sa ubang mga dapit sa mao gihapon nga ngalan, tan-awa ang Horse Knob. 29°57′42″S 151°44′51″E / 29.9618°S 151.7476°E / -29.9618; 151.7476 Horse Knob Bungtod Nasod  Ostralya Estado State of New South Wales Rehiyon Glen Innes Severn Gitas-on 1,316 m (4,318 ft) Tiganos 29°57′42″S 151°44′51″E / 29.9618°S 151.7476°E / -29.9618; 151.7476 Highest point  - elevation 1,362 m (4,469 ft) Wi...

Khwarezmia atau Khawarizmi adalah nama dari beberapa wilayah yang berpusat di delta sungai Amu Darya di Laut Aral, yang melingkupi wilayah Iran Raya (termasuk wilayah Uzbekistan sekarang). Disini pernah berdiri Kekaisaran Khwarezmia. Kekuasaannya meliputi dataran tinggi Ust-Urt dan kemungkinan membentang ke barat sampai ke pantai timur dari Laut Kaspia bagian utara. Pada sebelah selatan, ia berbatasan dengan Khorasan Raya, pada bagian utara dengan kerajaan suku Alan, pada bagian tenggara deng...

主業會主業會的會章「擁抱世界的十字架」成立時間1928年10月2日,​95年前​(1928-10-02)創始人施禮華類型自治社團(英语:Personal prelature)總部義大利羅馬布魯諾·布歐力路(Bruno Buozzi),73,00197坐標41°55′18.4″N 12°29′2.6″E / 41.921778°N 12.484056°E / 41.921778; 12.484056服务地区全世界會員95,318(2018年)監督范康仁蒙席 (Msgr. Fernando Ocáriz Braña)机关刊�...