-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerador_codigo
More file actions
145 lines (128 loc) · 4.76 KB
/
generador_codigo
File metadata and controls
145 lines (128 loc) · 4.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
struct instruction
{
char * string;
};
typedef struct instruction instr;
instr code[999];
int ultimalinea = 0;
/* concatena dos cadenas de caracteres, destino + origen */
char * concat(char * destino, char * origen)
{
char * variable = (char *) malloc (strlen(destino)+strlen(origen)+1);
strcat(variable,destino);
strcat(variable,origen);
return variable;
}
/***********************************************************************************************
* funciones que retornan el equivalente en java a la linea de codigo que se les pide traducir *
***********************************************************************************************/
/**
* genera el codigo en java para asignar una variable
* @param tipo tipo de dato de la variable
* @constante nombre identificador de la variable
* @asignacion es el texto que se coloca al otro lado de el "=" en la asignacion, variable = asignacion
* @return codigo java funcional para asignar un valor a una variable
*/
char * asignacion_variable (char * tipo, char * constante, char * asignacion){
char * variable = concat(tipo,constante);
if (strcmp(asignacion,"")){
variable = concat(variable, asignacion);
}
else { /* si se desea declarar una nueva variable, sin valor asignado */
if (strcmp(tipo,"int ")==0) variable = concat(variable, " = 0");
else if (strcmp(tipo,"double ")==0) variable = concat(variable, " = 0.0");
else if (strcmp(tipo,"bool ")==0) variable = concat(variable, " = 0");
else if (strcmp(tipo,"String ")==0) variable = concat(variable, " = \"\"");
else if (strcmp(tipo,"float ")==0) variable = concat(variable, " = 0.0");
}
return variable;
}
/**
* genera el codigo en java para una operacion aritmetica o logica
* @return codigo java funcional para aplicar el operador a los dos operandos
*/
char * concatenar_operacion (char * operando1, char * operando2, char * operador){
char * variable = concat(operando1,operador);
variable = concat(variable, operando2);
return variable;
}
/**
* genera el codigo en java para el condicional if
* @return codigo java funcional para aplicar el condicional
*/
char * escribir_if (char * condicion){
char * temporal = concat ("if"," ( ");
temporal = concat (temporal,condicion);
temporal = concat (temporal," )\n");
return (temporal);
}
/**
* genera el codigo en java para el condicional else
* @return codigo java funcional para aplicar el condicional
*/
char * escribir_else (){
return concat ("else","\n");
}
/**
* genera el codigo en java para el condicional elif
* @return codigo java funcional para aplicar el condicional
*/
char * escribir_elif (char * condicion){
char * temporal = concat ("else if"," ( ");
temporal = concat (temporal,condicion);
temporal = concat (temporal," )\n");
return temporal;
}
/**
* genera el codigo en java para el ciclo for
* @param iniciafor declaracion de una variable para el ciclo for int i = 0
* @param condicion condicion para que termine el for
* @param camvariable aumento o disminucion de la variable en iniciafor i++ o i--
* @return codigo java funcional para aplicar el ciclo
*/
char * escribir_for (char * iniciafor, char * condicion, char * cambvariable){
char * temporal = concat ("for"," ( ");
temporal = concat (temporal,iniciafor);
temporal = concat (temporal,";");
temporal = concat (temporal,condicion);
temporal = concat (temporal,";");
temporal = concat (temporal,cambvariable);
temporal = concat (temporal," )\n");
return temporal;
}
/**
* genera el codigo en java para el ciclo while
* @param condicion condicion para que termine el while
* @return codigo java funcional para aplicar el ciclo
*/
char * escribir_while (char * condicion){
char * temporal = concat ("while"," ( ");
temporal = concat (temporal,condicion);
temporal = concat (temporal," )\n");
return temporal;
}
/***********************************************************************************************
* funciones auxilieares *
***********************************************************************************************/
void escribir_linea (char * linea){
code[ultimalinea].string = (char *) malloc(strlen(linea)+1);
strcpy(code[ultimalinea++].string, linea);
}
void print_code(char * JAVA){
//Encabezado del archivo .java
FILE *fp;
char cadena[] = "\npackage java; \n"
" \n/** \n * @authores frander y maikol \n "
"*/ \n \npublic class JavaApplication1 { \n \t "
"public static void main(String[] args) { \n";
fp = fopen("salida.java", "w+");// se crea el .java
fputs(cadena, fp);
//aqui va el codigo proveniente del compilador
fputs(JAVA, fp);
char final[] = "\n}\n}\n";
fputs(final, fp);
fclose(fp);
}
void print(char * lineascodigo){
printf("%s\n",lineascodigo);
}