Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <ctype.h>
- #include <string.h>
- using namespace std;
- void imprimirToken( char * entrada, int simbolo){
- switch(simbolo){
- case 0:
- printf("PR, %s\n", entrada);
- break;
- case 1:
- printf("Numero, %s\n", entrada);
- break;
- case 2:
- printf("Llave abre, %s\n", entrada);
- break;
- case 3:
- printf("Llave cierra, %s\n", entrada);
- break;
- case 4:
- printf("Parentesis abre, %s\n", entrada);
- break;
- case 5:
- printf("Parentesis cierra, %s\n", entrada);
- break;
- case 6:
- printf("Not, %s\n", entrada);
- break;
- case 7:
- printf("And, %s\n", entrada);
- break;
- case 8:
- printf("Or, %s\n", entrada);
- break;
- default:
- printf("Cadena error, %s\n", entrada);
- break;
- }
- }
- int obtenerSimbolo (char caracter)
- {
- int simbolo = 0;
- if (isalpha(caracter)){
- simbolo = 0;
- }
- else if(isdigit(caracter)){
- simbolo = 1;
- }
- else{
- if(caracter == '{'){
- simbolo = 2;
- }
- else if(caracter == '}'){
- simbolo = 3;
- }
- else if(caracter == '('){
- simbolo = 4;
- }
- else if(caracter == ')'){
- simbolo = 5;
- }
- else if(caracter == '!'){
- simbolo = 6;
- }
- else if(caracter == '|'){
- simbolo = 7;
- }
- else if(caracter == '&'){
- simbolo = 8;
- }
- else if(caracter == ' '){
- simbolo = 10;
- }
- else{ //simbolo de error
- simbolo = 9;
- }
- }
- return simbolo;
- }
- void leerArchivo(char *rutaArchivo, int matriz[][11])
- {
- char const* const fileName = rutaArchivo;
- FILE* file = fopen(fileName, "r");
- char line[256];
- int tmp, actualEstado, posLinea, previoEstado, sizeToken;
- posLinea = 0, sizeToken =0;
- previoEstado = 0;
- while (fgets(line, sizeof(line), file) != NULL)
- {
- while(posLinea < sizeof(line))
- // sizeof(line)
- {
- actualEstado = obtenerSimbolo(line[posLinea]);
- if(previoEstado != actualEstado && actualEstado != 9 && previoEstado != 9)
- {
- char token[sizeToken];
- strncpy(token, &line[posLinea - sizeToken ], sizeToken );
- if(previoEstado != 10)
- {
- imprimirToken(token, previoEstado);
- cout << token << " tamanio " << sizeToken << " actualEstado " << actualEstado << " previoEstado " << previoEstado << endl;
- }
- sizeToken = 0;
- }
- //
- previoEstado = actualEstado;
- sizeToken++;
- posLinea++;
- }
- }
- fclose(file);
- }
- int main(int, char** argv)
- {
- //crea el automata predefinido
- int matrizAutomata[7][11] = { {4,5,3,3,3,3,3,2,1,6,0},
- {6,6,6,6,6,6,6,6,3,6,6},
- {6,6,6,6,6,6,6,3,6,6,6},
- {4,5,3,3,3,3,3,2,1,6,6},
- {4,5,3,3,3,3,3,2,1,6,0},
- {6,5,3,3,3,3,3,2,1,6,0},
- {6,6,6,6,6,6,6,6,6,6,6}
- };
- leerArchivo(argv[1], matrizAutomata);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement