Está en la página 1de 16

UNIDAD ACADÉMICA HERMOSILLO

NO. DE GRUPO: 001

ASIGNATURA:

INTRODUCCIÓN A LA TECNOLOGÍA DE COMPILADORES.

ACTIVIDAD:

ACT 6. REQUERIMIENTOS PARA CREAR UN LENGUAJE DE


PROGRAMACIÓN.

PROFESOR:

CARRILLO VILLAFAÑA PATRICIA SHIHEMY

CARRERA: INGENIERÍA EN SOFTWARE

FECHA: 26/10/22

ALUMNOS:

MARTINEZ SOTO LUIS JESUS

LEY MONTES EILEEN

GALINDO RAMIREZ JULIA ARIZBEE


Introducción

En esta actividad se realizará una investigación sobre los pasos o lo que se debe de
hacer, para realizar un lenguaje de programación dentro de compiladores y probar
códigos.

La mayoría de las personas que quieren aprender a "construir un lenguaje de


programación" buscan información sobre cómo construir un compilador. Quieren
entender el funcionamiento de un nuevo lenguaje de programación. Los
compiladores son una pieza importante del rompecabezas, pero crear un nuevo
lenguaje de programación requiere mucho más:

1) El lenguaje debe estar diseñado: el creador del lenguaje debe tomar algunas
decisiones básicas sobre el paradigma a utilizar y la sintaxis del lenguaje.

2) Se debe crear un compilador

3) Se debe implementar una biblioteca estándar

4) Deben proporcionarse herramientas de apoyo, como editores y sistemas de


compilación. Comprendamos la composición de estos puntos con más detalle.

Diseñando un lenguaje de programación

Si solo desea escribir su propio compilador para comprender cómo funcionan estas
cosas, puede omitir este paso. Simplemente puede tomar un subconjunto de
idiomas existentes o crear una variante simple y comenzar. Pero si planea crear su
propio lenguaje de programación, debe pensarlo.

Considero que el desarrollo de un lenguaje de programación se divide en dos fases:

- La fase del panorama general

- La fase de perfeccionamiento

En la primera etapa, respondemos preguntas básicas sobre nuestro idioma. ¿Qué


paradigma de ejecución queremos usar? ¿Será obligatorio o funcional? ¿O tal vez
basado en una máquina de estado o reglas comerciales?

¿Queremos tipeo estático o dinámico? ¿En qué programas será mejor este
lenguaje? ¿Se utilizará para scripts pequeños o sistemas grandes? Lo más
importante para nosotros: ¿rendimiento? ¿Legibilidad? ¿Queremos que coincida
con el lenguaje de programación existente? ¿Quieres aprender C o fácil de aprender
Python? ¿Queremos que se ejecute en una plataforma específica (JVM, CLR)?
¿Qué tipo de funciones de meta programación queremos admitir, si las hay?
macros? ¿Plantillas? ¿pensamientos?

En la segunda fase, continuaremos desarrollando el lenguaje que usamos.


Descubrimos que tenemos problemas, cosas que son muy difíciles o imposibles de
poner en palabras, y eventualmente lo desarrollamos. La segunda fase puede no
ser tan glamorosa como la primera, pero durante esta fase continuamos refinando
nuestro lenguaje para que sea práctico, así que no lo subestimes.

Construyendo un compilador

Crear un compilador es el paso más emocionante en la creación de un lenguaje de


programación. Una vez que tenemos un compilador, podemos dar vida a nuestro
lenguaje. Un compilador nos permite comenzar con un lenguaje, usarlo y determinar
lo que nos perdimos en el diseño original. Veamos el primer resultado.

La alegría de ejecutar su primer programa escrito en nuestro nuevo lenguaje de


programación es irresistible, sin importar cuán simple sea el programa.

¿Pero cómo se crea un compilador?

Como todo lo complejo lo hacemos en pasos:

1- Construimos un analizador: un analizador es la parte de nuestro


compilador que toma el texto de nuestro programa y comprende los comandos
que expresa. Identifique expresiones, declaraciones, clases y cree estructuras de
datos internas para representarlas. El resto del analizador utilizará estas
estructuras de datos en lugar de texto sin formato.

2- (Opcional) Convertimos el árbol de análisis en un árbol de sintaxis


abstracta. A menudo, las estructuras de datos generadas por el analizador son
de muy bajo nivel porque contienen muchos detalles que son irrelevantes para
nuestro compilador. Por esta razón, a menudo queremos reorganizar las
estructuras de datos a algo un poco más alto.

3- Nos ocupamos de los símbolos. Escribimos +1 o algo similar en el código.


Nuestro compilador tiene que averiguar a qué se refiere. ¿Es un campo? ¿Es
una variable? ¿Es un parámetro de método? Examinamos el código para
responder a esta pregunta.
4- Confirmamos el árbol. Necesitamos verificar si el programador cometió
algún error. ¿Agregar booleanos y enteros? ¿O acceder a un campo que no
existe? Necesitamos generar mensajes de error correctos.

5- Generamos código máquina. En este punto, traducimos el código a una


forma que una máquina pueda ejecutar. Para algunas máquinas virtuales, este
puede ser el código de máquina o código de bytes correcto

6- (Opcional) Creamos un enlace. En algunos casos, necesitamos combinar


el código de máquina generado para nuestro programa con el código de la
biblioteca estática que queremos incluir para crear un solo archivo ejecutable.

¿Siempre se necesita un compilador?

No. Podemos reemplazarlo con otros medios para ejecutar el código:

- Podemos escribir un intérprete: un intérprete es sustancialmente un


programa que realiza los pasos 1-4 de un compilador y luego ejecuta
directamente lo que especifica el árbol de sintaxis abstracta.

- Podemos escribir un transpiler: un transpiler hará lo que se especifica en


los pasos 1-4 y luego generará un código en algún idioma para el que ya
tengamos un compilador (por ejemplo, C++ o Java).

Una biblioteca estándar para su lenguaje de programación

Cualquier lenguaje de programación necesita hacer algunas cosas:

- Impresión en la pantalla

- Acceso al sistema de archivos

- Usar conexiones de red

- Creación de GUI

¿Cómo proporcionamos estas funcionalidades? Mediante la creación de una


biblioteca estándar. Este será un conjunto de funciones o clases que se pueden
llamar en los programas escritos en nuestro lenguaje de programación pero que
estarán escritos en algún otro lenguaje.
Herramientas de apoyo para un nuevo lenguaje de programación

Para hacer que un lenguaje sea utilizable en la práctica, con frecuencia necesitamos
escribir algunas herramientas de apoyo.

El más obvio es un editor. Un editor especializado con resaltado de sintaxis,


verificación de errores en línea y finalización automática es hoy en día
imprescindible para que cualquier desarrollador sea productivo.

Al principio, un editor podría ser suficiente, pero a medida que crezca su base de
usuarios, también aumentará la complejidad de los proyectos y se necesitarán más
herramientas de apoyo.

Códigos probados en Java:

Código 1: eileen

package gfg;
import java.io.*;

public class GFG {

// main driver method


public static void main (String[] args) throws Exception
{

// File path is passed as parameter


File file = new File("C:\\Users\\k04-13\\Desktop\\k.txt");

// Note: Double backquote is to avoid compiler


// interpret words
// like \test as \t (ie. as a escape sequence)

// Creating an object of BufferedReader class


BufferedReader br
= new BufferedReader(new FileReader(file));

// Declaring a string variable


String st;
// Condition holds true till
// there is character in a string
while ((st = br.readLine()) != null)
// Print the string
System.out.println(st);
}
}

resultado:

Código 2:luis

import java.io.*;

public class Metodo_de_filereader {

public static void main(String[] args) throws Exception


{
FileReader fr = new FileReader(
"C:\\Users\\K04-27\\Desktop\\UesISUAH.txt");

int i;

while ((i = fr.read()) != -1)


System.out.print((char)i);
}
}

resultado:

Código 3:eileen

// Java Program to illustrate


// reading from Text File
// using Scanner Class
import java.io.File;
import java.util.Scanner;
public class ReadFromFileUsingScanner
{
public static void main(String[] args) throws Exception
{
// pass the path to the file as a parameter
File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
Scanner sc = new Scanner(file);

while (sc.hasNextLine())
System.out.println(sc.nextLine());
}
}

resultado:
Código 4:eileen

// Java Program to illustrate reading from FileReader


// using Scanner Class reading entire File
// without using loop
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadingEntireFileWithoutLoop


{
public static void main(String[] args)
throws FileNotFoundException
{
File file = new File("C:\\Users\\pankaj\\Desktop\\test.txt");
Scanner sc = new Scanner(file);

// we just need to use \\Z as delimiter


sc.useDelimiter("\\Z");

System.out.println(sc.next());
}
}

resultado:

Código 5:luis
import java.nio.file.*;;

public class Metodo_de_filereader {

public static String readFileAsString(String fileName)throws Exception


{
String data = "";
data = new String(Files.readAllBytes(Paths.get(fileName)));
return data;
}

public static void main(String[] args) throws Exception


{
String data = readFileAsString("C:\\Users\\K04-27\\Desktop\\
UesISUAH.txt");
System.out.println(data);

Código 6: eileen
package readtextasstring;

import java.nio.file.*;;

public class ReadTextAsString {

public static String readFileAsString(String fileName)throws Exception


{
String data = "";
data = new String(Files.readAllBytes(Paths.get(fileName)));
return data;
}

public static void main(String[] args) throws Exception


{
String data = readFileAsString("C:\\Users\\k04-13\\Desktop\\k.txt");
System.out.println(data);
}
}

resultado:
Compilación con los requerimientos específicos cada uno
con try y catch:
Scanner lector;
char caracter;
int contador = 0;
try {
lector = new Scanner(new File("C:\\Users\\arizb\\
Documents\\texto\\aria.txt"));

while(lector.hasNext()) {
System.out.println("Palabra: " + lector.next());
//Mostramos palabra leída
contador++; //La contamos

//se busca la primera vez que aparece

catch (FileNotFoundException e) {
e.printStackTrace();

}
System.out.println("\nTotal palabras contadas: " + contador);

String nombreFichero = "C:\\Users\\arizb\\Documents\\texto\\


aria.txt";
//Declarar una variable FileReader
FileReader fr = null;
try {
//Abrir el fichero indicado en la variable nombreFichero
fr = new FileReader(nombreFichero);
//Leer el primer carácter
//Se debe almacenar en una variable de tipo int
int caract = fr.read();
//Se recorre el fichero hasta encontrar el carácter -1
// que marca el final del fichero
while(caract != -1) {
//Mostrar en pantalla el carácter leído convertido a char
System.out.print((char)caract);
//Leer el siguiente carácter
caract = fr.read();
System.out.println("Compilación correcta" );
}
}
catch (FileNotFoundException e) {
//Operaciones en caso de no encontrar el fichero
System.out.println("Error: Fichero no encontrado");
//Mostrar el error producido por la excepción
System.out.println(e.getMessage());

}
catch (Exception e) {
//Operaciones en caso de error general
System.out.println("Error de lectura del fichero");
System.out.println(e.getMessage());
}
finally {
//Operaciones que se harán en cualquier caso. Si hay error o no.
try {
//Cerrar el fichero si se ha abierto
if(fr != null)
fr.close();
}
catch (Exception e) {
System.out.println("Error al cerrar el fichero");
System.out.println(e.getMessage());

System.out.println("\nTotal palabras contadas: " + contador);

}
}
System.out.println("\nTotal palabras contadas: " + contador);

}
Resultado en pantalla:
Conclusión

Producir un lenguaje de programación es un proceso que parece misterioso para


bastantes desarrolladores. En esta investigación es solo un proceso. Es fascinante y
no es simple, sin embargo, se puede realizar.

Es viable que quiera producir un lenguaje de programación por una pluralidad de


causas. Una buena razón es para divertirse, otra para aprender cómo funcionan los
compiladores. El lenguaje puede concluir siendo bastante eficaz o no, dependiendo
de varios componentes. No obstante, si se divierte y/o se aprende a medida que se
construye, vale la pena invertir algo de tiempo en esto.

En esta actividad aprendimos acerca del diseño de un lenguaje, la construcción del


compilador, las bibliotecas a utilizar y algunas herramientas a utilizar para la
creación de un lenguaje de programación.

Referencias

Tomassetti, F. (2022, 31 marzo). How would I go about creating a programming

language? Strumenta. https://tomassetti.me/how-to-create-programming-language/

GeeksforGeeks. (2021, 20 diciembre). Different ways of Reading a text file in


Java. https://www.geeksforgeeks.org/different-ways-reading-text-file-java/

También podría gustarte