Ejercicio
Traductor de Pascal a java
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 de Ejemplo
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();
}
}
}