Advertisement
Guest User

Untitled

a guest
Oct 13th, 2015
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <ctype.h>
  4. #include <string.h>
  5.  
  6. using namespace std;
  7.  
  8. void imprimirToken( char * entrada, int simbolo){
  9. switch(simbolo){
  10. case 0:
  11. printf("PR, %s\n", entrada);
  12. break;
  13. case 1:
  14. printf("Numero, %s\n", entrada);
  15. break;
  16. case 2:
  17. printf("Llave abre, %s\n", entrada);
  18. break;
  19. case 3:
  20. printf("Llave cierra, %s\n", entrada);
  21. break;
  22. case 4:
  23. printf("Parentesis abre, %s\n", entrada);
  24. break;
  25. case 5:
  26. printf("Parentesis cierra, %s\n", entrada);
  27. break;
  28. case 6:
  29. printf("Not, %s\n", entrada);
  30. break;
  31. case 7:
  32. printf("And, %s\n", entrada);
  33. break;
  34. case 8:
  35. printf("Or, %s\n", entrada);
  36. break;
  37. default:
  38. printf("Cadena error, %s\n", entrada);
  39. break;
  40. }
  41. }
  42.  
  43.  
  44. int obtenerSimbolo (char caracter)
  45. {
  46. int simbolo = 0;
  47.  
  48. if (isalpha(caracter)){
  49. simbolo = 0;
  50. }
  51. else if(isdigit(caracter)){
  52. simbolo = 1;
  53. }
  54. else{
  55. if(caracter == '{'){
  56. simbolo = 2;
  57. }
  58. else if(caracter == '}'){
  59. simbolo = 3;
  60. }
  61. else if(caracter == '('){
  62. simbolo = 4;
  63. }
  64. else if(caracter == ')'){
  65. simbolo = 5;
  66. }
  67. else if(caracter == '!'){
  68. simbolo = 6;
  69. }
  70. else if(caracter == '|'){
  71. simbolo = 7;
  72. }
  73. else if(caracter == '&'){
  74. simbolo = 8;
  75. }
  76. else if(caracter == ' '){
  77. simbolo = 10;
  78. }
  79. else{ //simbolo de error
  80. simbolo = 9;
  81. }
  82. }
  83. return simbolo;
  84. }
  85.  
  86. void leerArchivo(char *rutaArchivo, int matriz[][11])
  87. {
  88. char const* const fileName = rutaArchivo;
  89. FILE* file = fopen(fileName, "r");
  90. char line[256];
  91. int tmp, actualEstado, posLinea, previoEstado, sizeToken;
  92. posLinea = 0, sizeToken =0;
  93. previoEstado = 0;
  94.  
  95. while (fgets(line, sizeof(line), file) != NULL)
  96. {
  97. while(posLinea < sizeof(line))
  98. // sizeof(line)
  99. {
  100. actualEstado = obtenerSimbolo(line[posLinea]);
  101. if(previoEstado != actualEstado && actualEstado != 9 && previoEstado != 9)
  102. {
  103. char token[sizeToken];
  104. strncpy(token, &line[posLinea - sizeToken ], sizeToken );
  105. if(previoEstado != 10)
  106. {
  107. imprimirToken(token, previoEstado);
  108. cout << token << " tamanio " << sizeToken << " actualEstado " << actualEstado << " previoEstado " << previoEstado << endl;
  109. }
  110. sizeToken = 0;
  111. }
  112. //
  113. previoEstado = actualEstado;
  114. sizeToken++;
  115. posLinea++;
  116. }
  117. }
  118. fclose(file);
  119. }
  120.  
  121. int main(int, char** argv)
  122. {
  123. //crea el automata predefinido
  124. int matrizAutomata[7][11] = { {4,5,3,3,3,3,3,2,1,6,0},
  125. {6,6,6,6,6,6,6,6,3,6,6},
  126. {6,6,6,6,6,6,6,3,6,6,6},
  127. {4,5,3,3,3,3,3,2,1,6,6},
  128. {4,5,3,3,3,3,3,2,1,6,0},
  129. {6,5,3,3,3,3,3,2,1,6,0},
  130. {6,6,6,6,6,6,6,6,6,6,6}
  131. };
  132. leerArchivo(argv[1], matrizAutomata);
  133. return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement