Varios cambios
This commit is contained in:
parent
e8aa4b485a
commit
0e7e401007
|
@ -1,3 +1,9 @@
|
|||
18/12/2002
|
||||
----------
|
||||
* Mas comentarizacion siguiendo las normas del ANSI C (Daijo)
|
||||
* Todas las cabeceras han de definirse: #define __EDIV_CABECERA_H_ (Daijo)
|
||||
* Cambiado *edivcentral.com por ediv.divsite.net (Daijo)
|
||||
|
||||
13/12/2002
|
||||
----------
|
||||
* Nueva funcion en la graphics.dll: get_rgb(color,&r,&g,&b). obtiene las
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __COMPILER_H
|
||||
#define __COMPILER_H
|
||||
#ifndef __EDIV_COMPILER_H_
|
||||
#define __EDIV_COMPILER_H_
|
||||
|
||||
#include "main.h"
|
||||
|
||||
|
@ -225,18 +225,16 @@ int case_sensitive;
|
|||
#define lnul 126 /* Comprueba que un puntero no sea NULL */
|
||||
|
||||
|
||||
struct { // Peephole, "mirilla" para el optimizador
|
||||
int dir; // Dirección
|
||||
int param; // Indica si ese opcode tiene parámetro
|
||||
int op; // Opcode
|
||||
} code[16]; // En code[15] debe quedar siempre la última instrucción generada
|
||||
struct { /* Peephole, "mirilla" para el optimizador */
|
||||
int dir; /* Dirección */
|
||||
int param; /* Indica si ese opcode tiene parámetro */
|
||||
int op; /* Opcode */
|
||||
} code[16]; /* En code[15] debe quedar siempre la última instrucción generada */
|
||||
|
||||
/* Informacion para temporal de debug (posicion en mem y fuente de cada sentencia) */
|
||||
FILE * linf; /* En este temporal guardamos la info y luego lo agregamos al exe */
|
||||
|
||||
int inicio,final; /* Direcciones inicial y final de mem[] de la sentencia */
|
||||
//int linea1,columna1; /* Posicion en la que comienza la sentencia en el fuente */
|
||||
//int linea2,columna2; /* Posicion en la que acaba la sentencia en el fuente */
|
||||
int inicio_prg,final_prg; /* Direcciones inicial y final en el PRG de la sentencia */
|
||||
int linsize;
|
||||
|
||||
|
@ -284,4 +282,4 @@ void sentencia();
|
|||
void g1(int op);
|
||||
void g2(int op, int pa);
|
||||
|
||||
#endif /* __COMPILER_H */
|
||||
#endif /* __EDIV_COMPILER_H_ */
|
|
@ -347,7 +347,7 @@ void* e_malloc(size_t size)
|
|||
void* ret;
|
||||
|
||||
if(!(ret = malloc(size))) {
|
||||
printf(translate(24)); // memoria insuficiente
|
||||
printf(translate(24)); /* memoria insuficiente */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __ENCRYPT_H
|
||||
#define __ENCRYPT_H
|
||||
#ifndef __EDIV_ENCRYPT_H_
|
||||
#define __EDIV_ENCRYPT_H_
|
||||
|
||||
void _encriptar(int encode, char * fichero, char * clave);
|
||||
void _comprimir(int encode, char *fichero);
|
||||
|
|
|
@ -18,18 +18,18 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __EXPRESION_H
|
||||
#define __EXPRESION_H
|
||||
#ifndef __EDIV_EXPRESION_H_
|
||||
#define __EDIV_EXPRESION_H_
|
||||
|
||||
#define max_exp 512 //Máximo número de elementos en una expresión
|
||||
#define long_pila 2048 //Longitud de la pila en ejecución
|
||||
#define max_exp 512 /* Máximo número de elementos en una expresión */
|
||||
#define long_pila 2048 /* Longitud de la pila en ejecución */
|
||||
|
||||
int pila[long_pila+max_exp+64]; // cálculo de expresiones (compilación y ejecución)
|
||||
int pila[long_pila+max_exp+64]; /* cálculo de expresiones (compilación y ejecución) */
|
||||
|
||||
// Tabla de elementos en la evaluación de una expresión
|
||||
/* Tabla de elementos en la evaluación de una expresión */
|
||||
|
||||
struct exp_ele {
|
||||
byte tipo; // econs, eoper, erango, ewhoami, ecall
|
||||
byte tipo; /* econs, eoper, erango, ewhoami, ecall */
|
||||
union {
|
||||
int valor;
|
||||
int token;
|
||||
|
@ -37,19 +37,20 @@ struct exp_ele {
|
|||
};
|
||||
} tabexp[max_exp], *_exp;
|
||||
|
||||
#define econs 0 // Constante // Tipos de elementos en tabexp[]
|
||||
#define eoper 1 // Operador
|
||||
#define erango 2 // Comprobación de rango
|
||||
#define ewhoami 3 // Identificador de proceso
|
||||
#define ecall 4 // Creación de un proceso
|
||||
//#define efunc 5 // Llamada a una función interna
|
||||
#define efext 6 // Llamada a una función externa
|
||||
#define echeck 7 // Comprobació¢n de validez de un identificador
|
||||
#define estring 8 // Cadena de texto (su offset constante)
|
||||
#define enull 9 // Comprobaci¢n de NULL pointer
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
#define econs 0 /* Constante // Tipos de elementos en tabexp[] */
|
||||
#define eoper 1 /* Operador */
|
||||
#define erango 2 /* Comprobación de rango */
|
||||
#define ewhoami 3 /* Identificador de proceso */
|
||||
#define ecall 4 /* Creación de un proceso */
|
||||
/*#define efunc 5*/ /* Llamada a una función interna */
|
||||
#define efext 6 /* Llamada a una función externa */
|
||||
#define echeck 7 /* Comprobació¢n de validez de un identificador */
|
||||
#define estring 8 /* Cadena de texto (su offset constante) */
|
||||
#define enull 9 /* Comprobaci¢n de NULL pointer */
|
||||
|
||||
/*
|
||||
* Prototipos
|
||||
*/
|
||||
void condicion(void);
|
||||
void expresion(void);
|
||||
void expresion_cpa(void);
|
||||
|
|
|
@ -18,14 +18,14 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __KEYWORDS_H__
|
||||
#define __KEYWORDS_H__
|
||||
#ifndef __EDIV_KEYWORDS_H_
|
||||
#define __EDIV_KEYWORDS_H_
|
||||
|
||||
// tabla de keywords
|
||||
/* tabla de keywords */
|
||||
extern struct keywords {
|
||||
char keyword[20]; // Max. 20 caracteres por keyword
|
||||
char code; // Code del keyword
|
||||
void* hfuncion; // Puntero a la función correspondiente (para no usar SWITCH)
|
||||
char keyword[20]; /* Max. 20 caracteres por keyword */
|
||||
char code; /* Code del keyword */
|
||||
void* hfuncion; /* Puntero a la función correspondiente (para no usar SWITCH) */
|
||||
} table[];
|
||||
|
||||
extern struct prioridades {
|
||||
|
@ -33,16 +33,16 @@ extern struct prioridades {
|
|||
char prioridad;
|
||||
} prioridad[];
|
||||
|
||||
// Defines de los keywords con su code
|
||||
/* Defines de los keywords con su code */
|
||||
|
||||
// CM = TIPO DE COMANDO
|
||||
#define CM_SEPARATE 0 // Se pone entre linea y linea
|
||||
#define CM_STATEMENT 1 // Statement
|
||||
#define CM_CALL 2 // Llamada a una función o un proceso
|
||||
#define CM_SIGNO 3 // Asignación
|
||||
#define CM_DATA 4 // Cualquier dato
|
||||
/* CM = TIPO DE COMANDO */
|
||||
#define CM_SEPARATE 0 /* Se pone entre linea y linea */
|
||||
#define CM_STATEMENT 1 /* Statement */
|
||||
#define CM_CALL 2 /* Llamada a una función o un proceso */
|
||||
#define CM_SIGNO 3 /* Asignación */
|
||||
#define CM_DATA 4 /* Cualquier dato */
|
||||
|
||||
// ST = STATEMENTS
|
||||
/* ST = STATEMENTS */
|
||||
#define ST_COMPILER_OPT 1
|
||||
#define ST_PROGRAM 2
|
||||
#define ST_CONST 3
|
||||
|
@ -50,7 +50,7 @@ extern struct prioridades {
|
|||
#define ST_LOCAL 5
|
||||
#define ST_PRIVATE 6
|
||||
#define ST_BEGIN 7
|
||||
#define ST_END 8 // Este end vale para todos los end
|
||||
#define ST_END 8 /* Este end vale para todos los end */
|
||||
#define ST_PROCESS 9
|
||||
#define ST_FUNCTION 10
|
||||
|
||||
|
@ -85,21 +85,21 @@ extern struct prioridades {
|
|||
#define ST_CLONE 35
|
||||
#define ST_DEBUG 36
|
||||
|
||||
// DT = DATA TYPES
|
||||
/* DT = DATA TYPES */
|
||||
#define DT_BYTE 0
|
||||
#define DT_WORD 1
|
||||
#define DT_INTEGER 2
|
||||
#define DT_STRING 3
|
||||
#define DT_POINTER 4
|
||||
#define DT_STRUCT 5
|
||||
#define DT_FLOAT 7 // Tipo de dato FLOAT (nuevo)
|
||||
#define DT_FLOAT 7 /* Tipo de dato FLOAT (nuevo) */
|
||||
#define DT_UNDECLARED 8
|
||||
|
||||
#define DT_GLOBAL 20 // Variable global
|
||||
#define DT_GLOBAL 20 /* Variable global */
|
||||
#define DT_LOCAL 21
|
||||
#define DT_PRIVATE 22
|
||||
|
||||
// SG = SIGNOS
|
||||
/* SG = SIGNOS */
|
||||
#define SG_CALL_OPEN 0
|
||||
#define SG_COMA 1
|
||||
#define SG_PARENTESIS_OPEN 2
|
||||
|
@ -125,13 +125,13 @@ extern struct prioridades {
|
|||
#define SG_AND 20
|
||||
#define SG_OR 21
|
||||
#define SG_XOR 22
|
||||
#define SG_IGUALDAD 23 //Comparacion
|
||||
#define SG_IGUALDAD 23 /* Comparacion */
|
||||
#define SG_DISTINTO 24
|
||||
#define SG_MAYOR 25
|
||||
#define SG_MAYOR_IGUAL 26
|
||||
#define SG_MENOR 27
|
||||
#define SG_MENOR_IGUAL 28
|
||||
#define SG_IGUAL 29 //Asignacion
|
||||
#define SG_IGUAL 29 /* Asignacion */
|
||||
|
||||
#define SG_SUMA_IGUAL 30
|
||||
#define SG_RESTA_IGUAL 31
|
||||
|
@ -144,17 +144,18 @@ extern struct prioridades {
|
|||
#define SG_DESP_DERECHA_IGUAL 38
|
||||
#define SG_DESP_IZQUIERDA_IGUAL 39
|
||||
|
||||
//CL = Tipos de call
|
||||
/* CL = Tipos de call */
|
||||
#define CL_USER 0
|
||||
#define CL_DLL 1
|
||||
|
||||
|
||||
/* PROTOTIPOS DE FUNCIONES
|
||||
/*
|
||||
* PROTOTIPOS DE FUNCIONES
|
||||
*/
|
||||
|
||||
typedef void (TYPEOF_hfuncion)();
|
||||
|
||||
// h = HANDLERS de los statements
|
||||
/* h = HANDLERS de los statements */
|
||||
void h_compiler_options();
|
||||
void h_program();
|
||||
void h_const();
|
||||
|
|
|
@ -757,8 +757,8 @@ char* translate(int id_cadena)
|
|||
case 0: /* español */
|
||||
{
|
||||
static char* msg[] = {
|
||||
/* 0 */ " **** Compilador eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://www.edivcentral.com\n",
|
||||
/* 1 */ "ATENCION: Esta version de eDIV esta inacabada.\nPor favor informe de cualquier bug a: bugs@edivcentral.com\n",
|
||||
/* 0 */ " **** Compilador eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://ediv.divsite.net\n",
|
||||
/* 1 */ "ATENCION: Esta version de eDIV esta inacabada.\nPor favor informe de cualquier bug a: ediv@divsite.net\n",
|
||||
/* 2 */ "Ayuda de opciones de comando:\n\n",
|
||||
/* 3 */ "%s [opciones] archivo.prg [ejecutable]\n\n",
|
||||
/* 4 */ "Lista de opciones:\n",
|
||||
|
@ -825,8 +825,8 @@ char* translate(int id_cadena)
|
|||
case 1: /* italiano */
|
||||
{
|
||||
static char* msg[] = {
|
||||
/* 0 */ " **** Compilatore eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://www.edivcentral.com\n",
|
||||
/* 1 */ "ATTENZIONE: Questa versione di eDIV è incompleta.\nPer favore informa su qualunque bug a: bugs@edivcentral.com\n",
|
||||
/* 0 */ " **** Compilatore eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://ediv.divsite.net\n",
|
||||
/* 1 */ "ATTENZIONE: Questa versione di eDIV è incompleta.\nPer favore informa su qualunque bug a: ediv@divsite.net\n",
|
||||
/* 2 */ "Guida opzioni di comando:\n\n",
|
||||
/* 3 */ "%s [opzioni] archivio.prg [eseguibile]\n\n",
|
||||
/* 4 */ "Lista opzioni:\n",
|
||||
|
@ -893,8 +893,8 @@ char* translate(int id_cadena)
|
|||
case 2: /* portugués */
|
||||
{
|
||||
static char* msg[] = {
|
||||
/* 0 */ " **** Compilador eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://www.edivcentral.com\n",
|
||||
/* 1 */ "ATENÇÃO: Esta versão de eDIV está inacabada.\nPor favor informe-nos de qualquer bug a: bugs@edivcentral.com\n",
|
||||
/* 0 */ " **** Compilador eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://ediv.divsite.net\n",
|
||||
/* 1 */ "ATENÇÃO: Esta versão de eDIV está inacabada.\nPor favor informe-nos de qualquer bug a: ediv@divsite.net\n",
|
||||
/* 2 */ "Ajuda de opções de comando:\n\n",
|
||||
/* 3 */ "%s [opções] arquivo.prg [executavel]\n\n",
|
||||
/* 4 */ "Lista de opções:\n",
|
||||
|
@ -963,8 +963,8 @@ char* translate(int id_cadena)
|
|||
case 3: /* inglés */
|
||||
{
|
||||
static char* msg[] = {
|
||||
/* 0 */ " **** eDIV Compiler " VERSION " ****\nCopyleft (c) 2000-2002Sion, Ltd.\nhttp://www.edivcentral.com\n",
|
||||
/* 1 */ "WARNING: This version of eDIV is unfinished.\nPlease report any bug to: bugs@edivcentral.com\n",
|
||||
/* 0 */ " **** eDIV Compiler " VERSION " ****\nCopyleft (c) 2000-2002Sion, Ltd.\nhttp://ediv.divsite.net\n",
|
||||
/* 1 */ "WARNING: This version of eDIV is unfinished.\nPlease report any bug to: ediv@divsite.net\n",
|
||||
/* 2 */ "Command line help:\n\n",
|
||||
/* 3 */ "%s [options] file.prg [executable]\n\n",
|
||||
/* 4 */ "Options list:\n",
|
||||
|
@ -1031,8 +1031,8 @@ char* translate(int id_cadena)
|
|||
case 4: /* catalán */
|
||||
{
|
||||
static char* msg[] = {
|
||||
/* 0 */ " **** Compilador eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://www.edivcentral.com\n",
|
||||
/* 1 */ "ATENCIÓ: Aquesta versió d' eDIV està sense acabar.\nSi us plau, informi de qualsevol bug a: bugs@edivcentral.com\n",
|
||||
/* 0 */ " **** Compilador eDIV " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://ediv.divsite.net\n",
|
||||
/* 1 */ "ATENCIÓ: Aquesta versió d' eDIV està sense acabar.\nSi us plau, informi de qualsevol bug a: ediv@divsite.net\n",
|
||||
/* 2 */ "Ajuda d' opcions de comand:\n\n",
|
||||
/* 3 */ "%s [opcions] arxiu.prg [executable]\n\n",
|
||||
/* 4 */ "Llista d' opcions:\n",
|
||||
|
@ -1098,8 +1098,8 @@ char* translate(int id_cadena)
|
|||
case 5: /* euskera */
|
||||
{
|
||||
static char* msg[] = {
|
||||
/* 0 */ " **** eDIV konpiladorea " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://www.edivcentral.com\n",
|
||||
/* 1 */ "KONTUZ: eDIV bertsio hau ez dago bukaturik.\nMesedez eman berri edozein akatzi buruz helbide honetan: bugs@edivcentral.com\n",
|
||||
/* 0 */ " **** eDIV konpiladorea " VERSION " ****\nCopyleft (c) 2000-2002 Sion, Ltd.\nhttp://ediv.divsite.net\n",
|
||||
/* 1 */ "KONTUZ: eDIV bertsio hau ez dago bukaturik.\nMesedez eman berri edozein akatzi buruz helbide honetan: ediv@divsite.net\n",
|
||||
/* 2 */ "Komandoei buruzko laguntza:\n\n",
|
||||
/* 3 */ "%s [aukerak] archivo.prg [exekutagarria]\n\n",
|
||||
/* 4 */ "Aukeren zerrenda:\n",
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __LISTADOS_H
|
||||
#define __LISTADOS_H
|
||||
#ifndef __EDIV_LISTADOS_H_
|
||||
#define __EDIV_LISTADOS_H_
|
||||
|
||||
void listado_objetos (void);
|
||||
void listado_ensamblador (void);
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __LOWER_H
|
||||
#define __LOWER_H
|
||||
#ifndef __EDIV_LOWER_H_
|
||||
#define __EDOV_LOWER_H_
|
||||
|
||||
#include "main.h"
|
||||
|
||||
|
|
|
@ -18,52 +18,55 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __MAIN_H
|
||||
#define __MAIN_H
|
||||
#ifndef __EDIV_MAIN_H_
|
||||
#define __EDIV_MAIN_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include "shared.h"
|
||||
#include "edivcfg/iniparser.h"
|
||||
|
||||
//#define MULTI_ERROR // para activar el sistema multi-error (bugs a mansalva)
|
||||
//#define DEBUG_DLL // para mostrar información al cargar las DLLs
|
||||
/* Para activar el sistema multi-error (bugs a mansalva) descomentarizar lo siguiente: */
|
||||
/*#define MULTI_ERROR */
|
||||
|
||||
/* Para mostrar informacion al cargar las DLLs descomentarizar lo siguiente: */
|
||||
/* #define DEBUG_DLL */
|
||||
|
||||
#define swap(a,b) {(a)^=(b);(b)^=(a);(a)^=(b);}
|
||||
|
||||
unsigned int stub_size; // tamaño del STUB.EXE (está almacenado en edivrun.lib)
|
||||
//FILE *fout; // stream del seudocodigo
|
||||
unsigned int stub_size; /* tamaño del STUB.EXE (está almacenado en edivrun.lib) */
|
||||
|
||||
byte *prog, *tprog; // buffer donde se almacena el PRG
|
||||
size_t progsize; // tamaño del PRG
|
||||
char nombreprog[256]; // nombre del PRG sin extensión
|
||||
char *fichero_prg; // nombre del archivo a compilar
|
||||
char outfilename[256]; // archivo de salida
|
||||
char edivrun_lib[256]; // archivo stub (distinto para cada sistema)
|
||||
byte *prog, *tprog; /* buffer donde se almacena el PRG */
|
||||
size_t progsize; /* tamaño del PRG */
|
||||
char nombreprog[256]; /* nombre del PRG sin extensión */
|
||||
char *fichero_prg; /* nombre del archivo a compilar */
|
||||
char outfilename[256]; /* archivo de salida */
|
||||
char edivrun_lib[256]; /* archivo stub (distinto para cada sistema) */
|
||||
|
||||
byte listados; // +1 = genera listado EML; +2 = genera tabla de objetos
|
||||
byte debug; // 1 = Compilar en modo de depurado
|
||||
byte noexe; // 1 = no crea un ejecutable
|
||||
byte listados; /* +1 = genera listado EML; +2 = genera tabla de objetos */
|
||||
byte debug; /* 1 = Compilar en modo de depurado */
|
||||
byte noexe; /* 1 = no crea un ejecutable */
|
||||
|
||||
int n_errors;
|
||||
int n_warnings;
|
||||
int linea;
|
||||
|
||||
// Información sobre los errores
|
||||
/* Información sobre los errores */
|
||||
|
||||
/*int numero_error=-1;
|
||||
int linea_error;
|
||||
int columna_error;*/
|
||||
/*
|
||||
* int numero_error=-1;
|
||||
* int linea_error;
|
||||
* int columna_error;
|
||||
*/
|
||||
|
||||
word error_25; // Para emitir "se esperaba una sentencia"
|
||||
word error_25; /* Para emitir "se esperaba una sentencia" */
|
||||
|
||||
|
||||
// Prototipos
|
||||
/* Prototipos */
|
||||
void *e_malloc(size_t size); /* un malloc con mensaje de error */
|
||||
void e_free(void *puntero); /* un free que fija el puntero a NULL tras liberarlo */
|
||||
void errormem(); /* mensaje "memoria insuficiente" */
|
||||
void save_error(word tipo); /* guarda una posición de error */
|
||||
void error(word tipo,word num, ...); /* error de compilación */
|
||||
void warning(int num, ...); /* warning en el proceso */
|
||||
|
||||
void *e_malloc(size_t size); // un malloc con mensaje de error
|
||||
void e_free(void *puntero);
|
||||
void errormem(); // mensaje "memoria insuficiente"
|
||||
void save_error(word tipo); // guarda una posición de error
|
||||
void error(word tipo,word num, ...);// error de compilación
|
||||
void warning(int num, ...); // warning en el proceso
|
||||
|
||||
#endif // __MAIN_H
|
||||
#endif
|
|
@ -18,8 +18,8 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __MODULOS_H
|
||||
#define __MODULOS_H
|
||||
#ifndef __EDIV_MODULOS_H_
|
||||
#define __EDIV_MODULOS_H_
|
||||
|
||||
#include <time.h>
|
||||
|
||||
|
|
|
@ -18,15 +18,16 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __PARSER_H
|
||||
#define __PARSER_H
|
||||
#ifndef __EDIV_PARSER_H_
|
||||
#define __EDIV_PARSER_H_
|
||||
|
||||
#include "main.h"
|
||||
|
||||
|
||||
byte* nombre_program; // nombre del programa, para guardarlo en el exe
|
||||
byte* nombre_program; /* nombre del programa, para guardarlo en el exe */
|
||||
|
||||
/* A continuacion viene el asunto de los objetos. Para el que no se haya estudiado a fondo
|
||||
/*
|
||||
* A continuacion viene el asunto de los objetos. Para el que no se haya estudiado a fondo
|
||||
* el DIVC.CPP (ejem) diré que un objeto es cada una de las variables, constantes, tipos
|
||||
* de proceso (declarados con PROCESS), tipos de funcion (declarados con FUNCTION), funciones
|
||||
* de DLL, estructuras, etc. etc. etc.
|
||||
|
@ -34,152 +35,144 @@ byte* nombre_program; // nombre del programa, para guardarlo en el exe
|
|||
* y familiarizaros con las abreviaturas... ;)
|
||||
*/
|
||||
|
||||
#define max_obj 4096 //Limite maximo de objetos del compilador
|
||||
#define long_med_id 16 //Longitud media de los identificadores (+4+4+1)
|
||||
#define max_obj 4096 /* Limite maximo de objetos del compilador */
|
||||
#define long_med_id 16 /* Longitud media de los identificadores (+4+4+1) */
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Tabla de objetos - - - - - - - - - - - - - - - - - *iobj primer objeto libre
|
||||
/* Tabla de objetos - - - - - - - - - - - - - - - - - *iobj primer objeto libre */
|
||||
|
||||
struct objeto {
|
||||
byte tipo; // Tipo de objeto
|
||||
byte usado; // Indica si el objeto ha sido usado antes de definirse
|
||||
byte * name; // Puntero al nombre, para algún listado
|
||||
byte * ierror;// Puntero al código para determinar la columna si es necesario
|
||||
int linea; // Línea de código fuente, para informar del error
|
||||
int param; // Indica que es un objeto declarado en los parámetros
|
||||
int dll; // En qué dll se declara el objeto, -1 = pertenece al prg
|
||||
struct objeto * anterior; // Anterior objeto de igual nombre
|
||||
struct objeto * bloque; // Bloque de este proceso (0-global/local N-private)
|
||||
struct objeto * member; // Indica a que struct pertenece (0-n/a)
|
||||
byte tipo; /* Tipo de objeto */
|
||||
byte usado; /* Indica si el objeto ha sido usado antes de definirse */
|
||||
byte * name; /* Puntero al nombre, para algún listado */
|
||||
byte * ierror;/* Puntero al código para determinar la columna si es necesario */
|
||||
int linea; /* Línea de código fuente, para informar del error */
|
||||
int param; /* Indica que es un objeto declarado en los parámetros */
|
||||
int dll; /* En qué dll se declara el objeto, -1 = pertenece al prg */
|
||||
struct objeto * anterior; /* Anterior objeto de igual nombre */
|
||||
struct objeto * bloque; /* Bloque de este proceso (0-global/local N-private) */
|
||||
struct objeto * member; /* Indica a que struct pertenece (0-n/a) */
|
||||
union {
|
||||
struct { // Constante
|
||||
struct { /* Constante */
|
||||
int valor;
|
||||
int literal; // 0-no, 1-si
|
||||
int literal; /* 0-no, 1-si */
|
||||
} cons;
|
||||
struct { // Variable global
|
||||
struct { /* Variable global */
|
||||
int offset;
|
||||
} vglo;
|
||||
struct { // Tabla global
|
||||
struct { /* Tabla global */
|
||||
int offset;
|
||||
int totalen; // numero total de elementos
|
||||
int len1,len2,len3; // len2/3==-1 si n/a
|
||||
int totalen; /* numero total de elementos */
|
||||
int len1,len2,len3; /* len2/3==-1 si n/a */
|
||||
} tglo,pigl;
|
||||
struct { // Byte global
|
||||
struct { /* Byte global */
|
||||
int offset;
|
||||
int totalen; // numero total de elementos
|
||||
int len1,len2,len3; // len2/3==-1 si n/a
|
||||
int totalen; /* numero total de elementos */
|
||||
int len1,len2,len3; /* len2/3==-1 si n/a */
|
||||
} bglo,pbgl;
|
||||
struct { // Word global
|
||||
struct { /* Word global */
|
||||
int offset;
|
||||
int totalen; // numero total de elementos
|
||||
int len1,len2,len3; // len2/3==-1 si n/a
|
||||
int totalen; /* numero total de elementos */
|
||||
int len1,len2,len3; /* len2/3==-1 si n/a */
|
||||
} wglo,pwgl;
|
||||
struct { // Cadena (string) global
|
||||
struct { /* Cadena (string) global */
|
||||
int offset;
|
||||
int totalen; // numero total de elementos
|
||||
int totalen; /* numero total de elementos */
|
||||
} cglo,pcgl;
|
||||
struct { // Struct
|
||||
struct { /* Struct */
|
||||
int offset;
|
||||
int len_item; // Número de campos
|
||||
int totalitems; // Numero total de registros
|
||||
int items1,items2,items3; // -1 si n/a
|
||||
int len_item; /* Número de campos */
|
||||
int totalitems; /* Numero total de registros */
|
||||
int items1,items2,items3; /* -1 si n/a */
|
||||
} sglo,sloc;
|
||||
struct { // Struct pointer
|
||||
struct { /* Struct pointer */
|
||||
int offset;
|
||||
struct objeto * ostruct; // Puntero al struct
|
||||
int totalitems; // Número total de registros
|
||||
int items1,items2,items3; // -1 si n/a
|
||||
struct objeto * ostruct; /* Puntero al struct */
|
||||
int totalitems; /* Número total de registros */
|
||||
int items1,items2,items3; /* -1 si n/a */
|
||||
} psgl,pslo;
|
||||
struct { // Variable local
|
||||
struct { /* Variable local */
|
||||
int offset;
|
||||
} vloc;
|
||||
struct { // Tabla local
|
||||
struct { /* Tabla local */
|
||||
int offset;
|
||||
int totalen;
|
||||
int len1,len2,len3;
|
||||
} tloc,pilo;
|
||||
struct { // Byte local
|
||||
struct { /* Byte local */
|
||||
int offset;
|
||||
int totalen; // numero total de elementos
|
||||
int len1,len2,len3; // len2/3==-1 si n/a
|
||||
int totalen; /* numero total de elementos */
|
||||
int len1,len2,len3; /* len2/3==-1 si n/a */
|
||||
} bloc,pblo;
|
||||
struct { // Word local
|
||||
struct { /* Word local */
|
||||
int offset;
|
||||
int totalen; // numero total de elementos
|
||||
int len1,len2,len3; // len2/3==-1 si n/a
|
||||
int totalen; /* numero total de elementos */
|
||||
int len1,len2,len3; /* len2/3==-1 si n/a */
|
||||
} wloc,pwlo;
|
||||
struct { // Cadena (string) local
|
||||
struct { /* Cadena (string) local */
|
||||
int offset;
|
||||
int totalen; // numero total de elementos
|
||||
int totalen; /* numero total de elementos */
|
||||
} cloc,pclo;
|
||||
struct { // Proceso
|
||||
struct { /* Proceso */
|
||||
struct objeto * bloque;
|
||||
int offset;
|
||||
int num_par; // Número de parámetros
|
||||
int num_par; /* Número de parámetros */
|
||||
} proc;
|
||||
|
||||
// qsort requiere como parametros un nombre de estructura y un campo
|
||||
// Ya le buscaremos una solución (p.ej. una función complementaria a EDIV_Export)
|
||||
/*
|
||||
* qsort requiere como parametros un nombre de estructura y un campo
|
||||
* Ya le buscaremos una solución (p.ej. una función complementaria a EDIV_Export)
|
||||
*/
|
||||
|
||||
struct { // Funcion externa (DLL)
|
||||
struct { /* Funcion externa (DLL) */
|
||||
int codigo;
|
||||
int num_par;
|
||||
} fext;
|
||||
};
|
||||
} obj[max_obj], * iobj; // - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define tnone 0 // Tipos de objetos en obj[]
|
||||
#define tcons 1 // Constantes
|
||||
#define tvglo 2 // Int global
|
||||
#define ttglo 3 // Tabla int global
|
||||
#define tcglo 4 // Cadena global
|
||||
#define tvloc 5 // Locales
|
||||
#define tnone 0 /* Tipos de objetos en obj[] */
|
||||
#define tcons 1 /* Constantes */
|
||||
#define tvglo 2 /* Int global */
|
||||
#define ttglo 3 /* Tabla int global */
|
||||
#define tcglo 4 /* Cadena global */
|
||||
#define tvloc 5 /* Locales */
|
||||
#define ttloc 6
|
||||
#define tcloc 7
|
||||
#define tproc 8 // Proceso
|
||||
#define tproc 8 /* Proceso */
|
||||
#define tfunc 9
|
||||
#define tsglo 10 // Structs
|
||||
#define tsglo 10 /* Structs */
|
||||
#define tsloc 11
|
||||
#define tfext 12 // Función de una librer¡a externa
|
||||
|
||||
#define tbglo 13 // Byte global
|
||||
#define twglo 14 // Word global
|
||||
#define tbloc 15 // Byte local
|
||||
#define twloc 16 // Word local
|
||||
|
||||
#define tpigl 17 // Puntero a ints global (un ttglo direccionable)
|
||||
#define tpilo 18 // Puntero a ints local (idem)
|
||||
|
||||
#define tpwgl 19 // Punteros a word
|
||||
#define tfext 12 /* Función de una librer¡a externa */
|
||||
#define tbglo 13 /* Byte global */
|
||||
#define twglo 14 /* Word global */
|
||||
#define tbloc 15 /* Byte local */
|
||||
#define twloc 16 /* Word local */
|
||||
#define tpigl 17 /* Puntero a ints global (un ttglo direccionable) */
|
||||
#define tpilo 18 /* Puntero a ints local (idem) */
|
||||
#define tpwgl 19 /* Punteros a word */
|
||||
#define tpwlo 20
|
||||
#define tpbgl 21 // Punteros a byte
|
||||
#define tpbgl 21 /* Punteros a byte */
|
||||
#define tpblo 22
|
||||
|
||||
#define tpcgl 23 // Punteros a string
|
||||
#define tpcgl 23 /* Punteros a string */
|
||||
#define tpclo 24
|
||||
#define tpsgl 25 // Punteros a struct
|
||||
#define tpsgl 25 /* Punteros a struct */
|
||||
#define tpslo 26
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
byte * vnom; // Vector de nombres (cad_hash:int, pieza (o iobj):int, asciiz)
|
||||
byte * vnom; /* Vector de nombres (cad_hash:int, pieza (o iobj):int, asciiz) */
|
||||
|
||||
union {
|
||||
byte *b;
|
||||
byte **p;
|
||||
} ivnom;
|
||||
|
||||
byte * inicio_objetos; // Para el crear listado de la tabla de objetos
|
||||
|
||||
byte * vhash[256]; // Punteros al vector de nombres;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
byte * inicio_objetos; /* Para el crear listado de la tabla de objetos */
|
||||
byte * vhash[256]; /* Punteros al vector de nombres; */
|
||||
|
||||
|
||||
/* Ahora viene todo lo referente al parser en si, es decir, al analizador léxico y sintáctico.
|
||||
/*
|
||||
* Ahora viene todo lo referente al parser en si, es decir, al analizador léxico y sintáctico.
|
||||
* También se incluye aquí al evaluador de expresiones (por cierto, usa notación polaca xD)
|
||||
* El parser de DIV es realmente bueno, y además muy personalizable. Que yo sepa, sólo existe
|
||||
* un bug en el evaluador de expresiones, al parecer los operadores lógicos no funcionan de
|
||||
|
@ -188,28 +181,26 @@ byte * vhash[256]; // Punteros al vector de nombres;
|
|||
* al listado EML ;)
|
||||
*/
|
||||
|
||||
#define max_nodos 128 //Máximo número de nodos del léxico para símbolos
|
||||
#define max_nodos 128 /* Máximo número de nodos del léxico para símbolos */
|
||||
|
||||
#define cr 13 //Retorno de carro
|
||||
#define lf 10 //Salto de linea
|
||||
#define tab 9 //Tabulación
|
||||
#define cr 13 /* Retorno de carro */
|
||||
#define lf 10 /* Salto de linea */
|
||||
#define tab 9 /* Tabulación */
|
||||
|
||||
//Valores de lex_case, si no son punteros a lex_simb
|
||||
#define l_err 0 //Caracter desconocido
|
||||
#define l_cr 1 //Fin de linea (l_err Carácter no esperado)
|
||||
#define l_id 2 //Identificador o palabra reservada
|
||||
#define l_spc 3 //Espacios y tabulaciones
|
||||
#define l_lit 4 //Literal
|
||||
#define l_num 5 //Constante numérica
|
||||
#define l_eof 6 //Fin de fichero
|
||||
/* Valores de lex_case, si no son punteros a lex_simb */
|
||||
#define l_err 0 /* Caracter desconocido */
|
||||
#define l_cr 1 /* Fin de linea (l_err Carácter no esperado) */
|
||||
#define l_id 2 /* Identificador o palabra reservada */
|
||||
#define l_spc 3 /* Espacios y tabulaciones */
|
||||
#define l_lit 4 /* Literal */
|
||||
#define l_num 5 /* Constante numérica */
|
||||
#define l_eof 6 /* Fin de fichero */
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Valores sintácticos o tokens (pieza)
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define p_ultima 0x00 //Fin de fichero <EOF>
|
||||
|
||||
/*
|
||||
* Valores sintácticos o tokens (pieza)
|
||||
*/
|
||||
#define p_ultima 0x00 /* Fin de fichero <EOF> */
|
||||
#define p_program 0x01
|
||||
#define p_const 0x02
|
||||
#define p_global 0x03
|
||||
|
@ -219,8 +210,8 @@ byte * vhash[256]; // Punteros al vector de nombres;
|
|||
#define p_process 0x07
|
||||
#define p_private 0x08
|
||||
#define p_struct 0x09
|
||||
#define p_import 0x0A // sólo para mostrar el warning de que ya no se usa
|
||||
#define p_setup_program 0x0B // idem
|
||||
#define p_import 0x0A /* sólo para mostrar el warning de que ya no se usa */
|
||||
#define p_setup_program 0x0B /* idem */
|
||||
|
||||
#define p_string 0x0C
|
||||
#define p_byte 0x0D
|
||||
|
@ -230,9 +221,9 @@ byte * vhash[256]; // Punteros al vector de nombres;
|
|||
#define p_compiler_options 0x10
|
||||
#define p_function 0x11
|
||||
|
||||
#define p_until 0x15 // antes 0x16
|
||||
#define p_else 0x16 // antes 0x17
|
||||
#define p_elseif 0x17 // NUEVO!
|
||||
#define p_until 0x15 /* antes 0x16 */
|
||||
#define p_else 0x16 /* antes 0x17 */
|
||||
#define p_elseif 0x17 /* NUEVO! */
|
||||
|
||||
#define p_return 0x18
|
||||
|
||||
|
@ -328,9 +319,9 @@ byte * vhash[256]; // Punteros al vector de nombres;
|
|||
#define p_shr_asig 0x73
|
||||
#define p_shl_asig 0x74
|
||||
|
||||
#define p_ini_rem 0x7d //Inicio comentario
|
||||
#define p_end_rem 0x7e //Fin comentario
|
||||
#define p_rem 0x7f //Comentario de una linea
|
||||
#define p_ini_rem 0x7d /* Inicio comentario */
|
||||
#define p_end_rem 0x7e /* Fin comentario */
|
||||
#define p_rem 0x7f /* Comentario de una linea */
|
||||
|
||||
#define p_strigu 0xc0
|
||||
#define p_strdis 0xc1
|
||||
|
@ -383,70 +374,55 @@ byte * vhash[256]; // Punteros al vector de nombres;
|
|||
|
||||
#define p_pointerbyte 0xf7
|
||||
|
||||
#define p_lit 0xfc //Puntero al literal (txt) en pieza_num
|
||||
#define p_id 0xfd //o es un ptr a vnom (a un ptr al objeto)
|
||||
#define p_num 0xfe //Número en pieza_num
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Tabla de elementos léxicos (distintos tipos de token)
|
||||
#define p_lit 0xfc /* Puntero al literal (txt) en pieza_num */
|
||||
#define p_id 0xfd /* o es un ptr a vnom (a un ptr al objeto) */
|
||||
#define p_num 0xfe /* Número en pieza_num */
|
||||
|
||||
/* Tabla de elementos léxicos (distintos tipos de token) */
|
||||
struct lex_ele { byte caracter;
|
||||
byte token;
|
||||
struct lex_ele * alternativa;
|
||||
struct lex_ele * siguiente; }
|
||||
lex_simb[max_nodos], * ilex_simb, * lex_case[256];
|
||||
|
||||
// Pieza (token) que se está leyendo (ver constantes p_xxxx)
|
||||
/* Pieza (token) que se está leyendo (ver constantes p_xxxx) */
|
||||
int pieza, pieza_num;
|
||||
|
||||
struct objeto * o; // Cuando pieza=p_id, objeto de tipo (**o).tipo
|
||||
struct objeto * bloque_actual; // Bloque que esta siendo analizado
|
||||
struct objeto * bloque_lexico; // Es 0 hasta las privadas del program
|
||||
struct objeto * o; /* Cuando pieza=p_id, objeto de tipo (**o).tipo */
|
||||
struct objeto * bloque_actual; /* Bloque que esta siendo analizado */
|
||||
struct objeto * bloque_lexico; /* Es 0 hasta las privadas del program */
|
||||
struct objeto * member; /* !=0 al declarar/acceder un miembro de un struct */
|
||||
|
||||
struct objeto * member; // !=0 al declarar/acceder un miembro de un struct
|
||||
|
||||
// número de nodos, número de objetos
|
||||
/* número de nodos, número de objetos */
|
||||
int num_nodos, num_obj;
|
||||
|
||||
int num_obj_predefinidos;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Variables relacionadas con el listado formateado
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
int coment; // 0-Código, 1-Dentro de comentario, 2-Anidado, ...
|
||||
//int convert; // Indica si se deben generar ya los token en ls
|
||||
/*
|
||||
* Variables relacionadas con el listado formateado
|
||||
*/
|
||||
int coment; /* 0-Código, 1-Dentro de comentario, 2-Anidado, ... */
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
int old_linea; // Situación en el fichero del token anterior al último leido
|
||||
int old_linea; /* Situación en el fichero del token anterior al último leido */
|
||||
byte * old_ierror, * old_ierror_end;
|
||||
|
||||
// El último token leido está en (linea,ierror,ierror_end)
|
||||
|
||||
/* El último token leido está en (linea,ierror,ierror_end) */
|
||||
byte * ultima_linea,cero;
|
||||
|
||||
// Siguiente token -> next_lexico()
|
||||
/* Siguiente token -> next_lexico() */
|
||||
int next_pieza;
|
||||
int next_linea;
|
||||
byte * next_source;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
int parametros;
|
||||
|
||||
int acceso_remoto; // Para no permitir id.private
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int acceso_remoto; /* Para no permitir id.private */
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// PROTOTIPOS
|
||||
//-----------------------------------------------------------------------------
|
||||
/*
|
||||
* PROTOTIPOS
|
||||
*/
|
||||
|
||||
int crea_objeto(byte * nombre, int nparam);
|
||||
void psintactico(void);
|
||||
|
@ -466,4 +442,4 @@ void tglo_init(int tipo);
|
|||
void tloc_init(int tipo);
|
||||
void tglo_init2(int tipo);
|
||||
|
||||
#endif // __PARSER_H
|
||||
#endif /* __EDIV_PARSER_H_ */
|
|
@ -18,17 +18,18 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/* IDs de idioma:
|
||||
* 0 - ES - Español
|
||||
* 1 - IT - Italiano (CicTec)
|
||||
* 2 - PT - Portugués (tareco)
|
||||
* 3 - EN - Inglés (de momento Er_Makina :P)
|
||||
* 4 - CA - Catalán (BenKo)
|
||||
* 5 - EU - Euskera (Jorge Urreta)
|
||||
/*
|
||||
* IDs de idioma:
|
||||
* 0 - ES - Español
|
||||
* 1 - IT - Italiano (CicTec)
|
||||
* 2 - PT - Portugués (tareco)
|
||||
* 3 - EN - Inglés (de momento Er_Makina :P)
|
||||
* 4 - CA - Catalán (BenKo)
|
||||
* 5 - EU - Euskera (Jorge Urreta)
|
||||
*/
|
||||
|
||||
#ifndef __LANGUAGE_H
|
||||
#define __LANGUAGE_H
|
||||
#ifndef __EDIV_LANGUAGE_H_
|
||||
#define __EDIV_LANGUAGE_H_
|
||||
|
||||
#define NUM_LANGUAGES 6
|
||||
|
||||
|
@ -36,18 +37,18 @@
|
|||
|
||||
int idioma;
|
||||
|
||||
// comunes
|
||||
/* comunes */
|
||||
int detecta_idioma();
|
||||
char* translate(int id_cadena);
|
||||
char* translate_dll_error(int num);
|
||||
|
||||
// compilador
|
||||
/* compilador */
|
||||
char* translate_error(int num);
|
||||
char* translate_warning(int num);
|
||||
char* translate_ltlex_error(int num);
|
||||
|
||||
// stub
|
||||
/* stub */
|
||||
char* translate_runtime_error(int num);
|
||||
char* translate_critical_error(int num);
|
||||
|
||||
#endif // __LANGUAGE_H
|
||||
#endif /* __EDIV_LANGUAGE_H_ */
|
||||
|
|
|
@ -22,11 +22,11 @@
|
|||
* Definiciones compartidas de eDiv - Usar en eDiv, encrypt y stub :)
|
||||
*/
|
||||
|
||||
#ifndef __SHARED_H
|
||||
#define __SHARED_H
|
||||
#ifndef __EDIV_SHARED_H_
|
||||
#define __EDIV_SHARED_H_
|
||||
|
||||
#define VERSION "0.1.1 (Orion)"
|
||||
#define la_clave "Open_eDiv"
|
||||
#define VERSION "0.1.1 (Orion)" /* Version y codename */
|
||||
#define la_clave "Open_eDiv" /* Clave de cifrado */
|
||||
|
||||
#define uchar char
|
||||
#define byte unsigned char
|
||||
|
@ -37,6 +37,6 @@
|
|||
|
||||
#define magic "eDIV Stub\x1a\x0d\x0a\xff"
|
||||
|
||||
#define long_header 9 //Longitud de la cabecera al inicio de los programas
|
||||
#define long_header 9 /* Longitud de la cabecera al inicio de los programas */
|
||||
|
||||
#endif // __SHARED_H
|
||||
#endif /* __EDIV_SHARED_H_
|
Loading…
Reference in a new issue