Traductor de Pascal a java Aprende programación con ejercicios Java

Lección:

Administración de Archivos


Ejercicio:

Traductor de Pascal a java 62


Objetivo:

Cree un traductor básico de Pascal a java. Aceptará programas como:

programa de ejemplo;

Var
i: entero;
máx.: entero;

empezar
writeLn("¿Cuántas veces?");
readLn(máx.);
para i := 1 a max do
writeLn("Hola");
fin.

Los pasos que debes seguir son:
Lee de principio a fin un archivo de texto, cuyo nombre será introducido por el usuario en línea de comandos o de forma interactiva: hasta 2 puntos.

Volcar el contenido a otro archivo de texto, cuyo nombre será el mismo, pero con la extensión ".cs" en lugar de ".pas": hasta 4 puntos.

Reemplace "WriteLn" por "Console.WriteLine", " = "con "==", " := " con "=", comillas simples con comillas dobles, "begin" con "{" y "end;", "end.", "end" (en ese orden) con "}", : hasta 6 puntos.

Reemplace "programa x;" por "clase x {" seguido de "Principal", reemplace "readln(x)" por "x=Convert.ToInt32(Console.RadLine())" ("x" debe ser cualquier otro identificador): hasta 8 puntos.

Elimine "var" y reemplace "x: integer" por "int x" (pero "x" debe ser cualquier otro identificador): hasta 9 puntos. Dar un formato adecuado a "para": hasta 10 puntos.

Cree una fuente de java compilable a partir de la fuente Pascal anterior y otras similares: hasta 11 puntos.


Código:

package PascalToCSharp;
import java.util.*;

public class Main
{
	public static void main(String[] args)
	{
		System.out.print("Enter name file: ");
		String fileName = new Scanner(System.in).nextLine();


		if ((new java.io.File(fileName)).isFile())
		{
			java.io.FileReader filePascal = new java.io.FileReader(fileName);
		    java.io.BufferedReader filePascalBufferedReader = new java.io.BufferedReader(filePascal);
			java.io.FileWriter fileCSharp = new java.io.FileWriter(fileName.substring(0, fileName.length() - 3) + "cs");
			String line;
			do
			{
				line = filePascalBufferedReader.readLine();
				if (line != null)
				{
					line = line.replace("writeLn", "Console.WriteLine");
					line = line.replace(" = ", "==");
					line = line.replace(" :=", "=");
					line = line.replace("'", "\"");
					line = line.replace("begin", "{");
					line = line.replace("end;", "}");
					line = line.replace("end.", "}");
					line = line.replace("end", "}");

					if ((line.contains("program ")) && (line.substring(line.length() - 1).equals(";")))
					{
						line = line.replace("program ", "class ");
						line = line.replace(";", "\n{\n static void Main()\n{");
					}

					if (line.contains("readLn("))
					{
						line = line.replace("readLn(", "");
						line = line.replace(");", "");
						line += " = Convert.ToInt32(Console.RadLine());";
					}

					line = line.replace("var", "");
					if (line.contains(": integer;"))
					{
						line = line.replace(": integer;", "");
						line = "int " + line.trim() + ";";
					}

					/* if ((line.Contains("for ")) &&
					    (line.Contains(" to ")) && 
					    (line.Contains(" do ")))
					 {
					     line = line.Replace("for ", "for (");
					     line = line.Replace(" to", "");
					     line = "int " + line.Trim() + ";";
					 }

					fileCSharp.write(line + System.lineSeparator());
				}
			} while (line != null);
			filePascal.close();
			fileCSharp.close();
		}
	}
}