Advertisement
LinkStormer

LexerGenerator.flex

May 25th, 2025
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.64 KB | Source Code | 0 0
  1. // Archivo: LexerGenerator.flex
  2. import java.util.ArrayList;
  3.  
  4. %%
  5. %class Lexer
  6. %unicode
  7. %public
  8. %line
  9. %column
  10. %type Integer
  11. %state COMENTARIO
  12.  
  13. %{
  14. public int currentLine = 1;
  15. public int currentColumn = 1;
  16. private ArrayList<String> identificadores = new ArrayList<>();
  17.  
  18. public int getIdentificadorId(String lexema) {
  19. if (!identificadores.contains(lexema)) {
  20. identificadores.add(lexema);
  21. }
  22. return identificadores.indexOf(lexema);
  23. }
  24. %}
  25.  
  26. LineTerminator = \r|\n|\r\n
  27. WhiteSpace = {LineTerminator} | [ \t\f]
  28. Identificador = [a-zA-Z_][a-zA-Z0-9_]*
  29. Entero = [0-9]+
  30. Decimal = {Entero}"."{Entero}
  31.  
  32. %%
  33. <YYINITIAL> {
  34. // Palabras clave y símbolos básicos
  35. "if" { return sym.IF; } // IF = 1002
  36. "else" { return sym.ELSE; } // ELSE = 1003
  37. "for" { return sym.FOR; } // FOR = 1000
  38. "while" { return sym.WHILE; } // WHILE = 1001
  39. "switch" { return sym.SWITCH; }
  40. "do" { return sym.BUCLE_DO; }
  41. "foreach" { return sym.BUCLE_FOREACH; }
  42. "in" { return sym.IN; } // Token 1013
  43. "return" { return sym.RETORNO; }
  44. "true" { return sym.BOOLEANO_VERDADERO; } // Usar el nombre correcto
  45. "false" { return sym.BOOLEANO_FALSO; }
  46. "class"|"struct" { return sym.CLASE; }
  47. "extends"|"implements" { return sym.HERENCIA; }
  48. "interface"|"protocol" { return sym.INTERFAZ; }
  49. "public"|"private"|"protected" { return sym.MODIFICADOR_ACCESO; }
  50. "import"|"using"|"include" { return sym.IMPORTACION; }
  51. "package"|"namespace"|"module" { return sym.PAQUETE; }
  52. "function"|"def"|"fn" { return sym.FUNCION; }
  53. "return"|"yield" { return sym.RETORNO; }
  54. "new"|"delete"|"this" { return sym.INSTANCIA; }
  55. "const"|"final"|"readonly" { return sym.CONSTANTE; }
  56. "var"|"let"|"dynamic" { return sym.VARIABLE; }
  57. "break"|"continue"|"goto" { return sym.CONTROL_FLUJO; }
  58. "case"|"default" { return sym.CASE; }
  59. "async"|"await"|"thread" { return sym.CONCURRENTE; }
  60. "template"|"generics" { return sym.GENERICO; }
  61. "typedef"|"using" { return sym.ALIAS; }
  62. "@override"|"@deprecated" { return sym.ATRIBUTO; }
  63. "#define"|"#pragma"|"#include" { return sym.DIRECTIVA; }
  64. "array"|"list"|"tuple" { return sym.TIPO_COMPUESTO; }
  65. "enum"|"union" { return sym.ENUM; }
  66.  
  67. // Operadores y símbolos
  68. "=" { return sym.ASIGNACION; }
  69. "+" { return sym.SUMA; }
  70. "(" { return sym.PARENTESIS_IZQ; }
  71. ")" { return sym.PARENTESIS_DER; }
  72. "-" { return sym.RESTA; }
  73. "*" { return sym.MULTIPLICACION; }
  74. "/" { return sym.DIVISION; }
  75. "%" { return sym.MODULO; }
  76. "++" { return sym.INCREMENTO; }
  77. "--" { return sym.DECREMENTO; }
  78. "&&"|"||"|"!" { return sym.OPERADOR_LOGICO; }
  79. "=="|"!="|">"|"<"|">="|"<=" { return sym.OPERADOR_COMPARACION; }
  80. "&"|"|"|"^"|"~"|"<<"|">>" { return sym.OPERADOR_BITWISE; }
  81. "="|"+="|"-="|"*="|"/=" { return sym.ASIGNACION; }
  82. "*"|"&"|"->" { return sym.PUNTERO; }
  83. "=>"|"lambda" { return sym.LAMBDA; }
  84. "{" { return sym.LLAVE_IZQ; }
  85. "}" { return sym.LLAVE_DER;}
  86. "[" { return sym.CORCHETE_IZQ;}
  87. "]" { return sym.CORCHETE_DER;}
  88.  
  89. // Literales
  90. "true"|"false"|"null"|"undefined" { return sym.LITERAL; }
  91.  
  92. // SQL
  93. "CREATE" { return sym.CREATE; } // Token 238
  94. "INSERT" { return sym.INSERT; } // Token 1010
  95. "UPDATE" { return sym.UPDATE; } // Token 1008
  96. "DELETE" { return sym.DELETE; } // Token 1007
  97. "SELECT" { return sym.SELECT; } // Token 1006
  98. "FROM" { return sym.FROM; } // Token 1005
  99. "WHERE" { return sym.WHERE; } // Token 1004
  100. "INTO" { return sym.INTO; } // Token 1003
  101. "DATABASE" { return sym.DATABASE; } // Token 239
  102. "TABLE" { return sym.TABLE; } // sym.TABLE = 240
  103. "ALTER" { return sym.ALTER; } // Token 1008
  104. "DROP" { return sym.DROP; } // Token 1009
  105. "SET" { return sym.SET; } // Token 1011
  106. "PRIMARY"({WhiteSpace})+"KEY" { return sym.PRIMARY_KEY; } // Token 243
  107. "BEGIN"|"COMMIT"|"ROLLBACK" { return sym.TRANSACCION; }
  108. "INNER JOIN"|"LEFT JOIN" { return sym.JOIN; }
  109. "ORDER"({WhiteSpace})+"BY"|"GROUP"({WhiteSpace})+"BY" { return sym.ORDEN; }
  110. "COUNT()"|"SUM()"|"AVG()" { return sym.FUNCION_SQL; }
  111. "WHERE"|"HAVING"|"LIMIT" { return sym.CLAUSULA; }
  112. "VARCHAR"|"INTEGER"|"DATE" { return sym.TIPO_DATO_SQL; }
  113. "ACID"|"TRANSACTION" { return sym.TRANSACCION_SEGURA; }
  114. "CREATE"({WhiteSpace})+"INDEX"|"DROP"({WhiteSpace})+"INDEX" { return sym.INDEX; }
  115. "CREATE"({WhiteSpace})+"VIEW"|"ALTER"({WhiteSpace})+"VIEW" { return sym.VISTA; }
  116. "BEFORE"({WhiteSpace})+"INSERT"|"AFTER"({WhiteSpace})+"UPDATE" { return sym.TRIGGER; }
  117. "CREATE"({WhiteSpace})+"USER"|"GRANT" { return sym.USUARIO; }
  118. "BACKUP"({WhiteSpace})+"DATABASE"|"RESTORE" { return sym.BACKUP; }
  119. "MAX()"|"MIN()"|"STDDEV()" { return sym.FUNCION_AGREGADA; }
  120. "JSON"|"JSONB" { return sym.TIPO_JSON; }
  121. "ADD" { return sym.ADD; }
  122. "int"|"float"|"string"|"bool" { return sym.TIPO_DATO; }
  123. "VALUES" { return sym.VALUES; }
  124.  
  125. // -------------------------------
  126. // Web
  127. // -------------------------------
  128. "GET"|"POST"|"HTTP" { return sym.WEB; }
  129. "Set-Cookie"|"Cookie" { return sym.COOKIE; }
  130. "Content-Type"|"Authorization" { return sym.HEADER; }
  131. "@GetMapping"|"@PostMapping" { return sym.RUTA; }
  132. "app.use()"|"next()" { return sym.MIDDLEWARE; }
  133. "200 OK"|"404 Not Found" { return sym.ESTADO_HTTP; }
  134. "OAuth"|"JWT"|"Bearer" { return sym.AUTENTICACION; }
  135. "CORS"|"CSRF"|"XSS" { return sym.SEGURIDAD; }
  136. "document.getElementById()" { return sym.DOM; }
  137. "onclick"|"addEventListener" { return sym.EVENTO; }
  138. "Promise"|"async/await" { return sym.PROMESA; }
  139. "require()"|"export" { return sym.MODULO_JS; }
  140. "useState()"|"useEffect()" { return sym.HOOK; }
  141. "React.Component"|"@Component" { return sym.COMPONENTE; }
  142. "*ngIf"|"*ngFor" { return sym.DIRECTIVA_ANGULAR; }
  143. "[(ngModel)]"|"{{ }}" { return sym.BINDING; }
  144. "@Injectable()"|"@Service" { return sym.SERVICIO; }
  145. "RouterModule"|"@Route" { return sym.RUTEO; }
  146. "Redux"|"Vuex" { return sym.STORE; }
  147. "@Test"|"describe()" { return sym.TEST; }
  148. "Mockito"|"jest.fn()" { return sym.MOCK; }
  149. "assertEquals()"|"expect()" { return sym.ASSERTION; }
  150. "coverage"|"istanbul" { return sym.COVERAGE; }
  151. "Dockerfile"|"FROM" { return sym.CONTENEDOR; }
  152. "docker-compose"|"k8s" { return sym.ORQUESTACION; }
  153. "AWS"|"S3"|"Lambda" { return sym.CLOUD; }
  154. "Jenkinsfile"|".gitlab-ci.yml" { return sym.CI_CD; }
  155. "git commit"|"git push" { return sym.VERSIONADO; }
  156. "main"|"develop"|"feature/" { return sym.BRANCH; }
  157. "git merge"|"rebase" { return sym.MERGE; }
  158. "<<<<<<<"|"=======" { return sym.CONFLICTO; }
  159. "pre-commit"|"post-receive" { return sym.HOOK_GIT; }
  160. "REST"|"GraphQL"|"gRPC" { return sym.API; }
  161. "/users"|"/products" { return sym.ENDPOINT; }
  162. "?page=1"|"&sort=asc" { return sym.QUERY_PARAM; }
  163. "JSON"|"form-data" { return sym.BODY_REQUEST; }
  164. "ws://"|"onmessage" { return sym.WEBSOCKET; }
  165. "Buffer.alloc()"|"ArrayBuffer" { return sym.BUFFER; }
  166. "Readable"|"Writable" { return sym.STREAM; }
  167. "fs.readFile()"|"open()" { return sym.ARCHIVO; }
  168. "chmod"|"rwx" { return sym.PERMISO; }
  169. "/home/user"|"C:\\" { return sym.RUTA_ARCHIVO; }
  170. "console.log()"|"log4j" { return sym.LOG; }
  171. "debugger"|"breakpoint" { return sym.DEBUG; }
  172. "profiler"|"benchmark" { return sym.PERFORMANCE; }
  173. "malloc"|"gc.collect()" { return sym.HEAP; }
  174. "stack overflow"|"push/pop" { return sym.STACK; }
  175. "GC"|"refcounting" { return sym.GARBAGE_COLLECTOR; }
  176. "pthread_create()"|"ThreadPool" { return sym.HILO; }
  177. "sem_wait()"|"sem_post()" { return sym.SEMAFORO; }
  178. "mutex_lock()"|"wait/notify" { return sym.DEADLOCK; }
  179. "pipe()"|"shared_memory" { return sym.IPC; }
  180. "SIGINT"|"SIGTERM" { return sym.SENAL; }
  181. "fork()"|"nohup" { return sym.DAEMON; }
  182. "bind()"|"listen()" { return sym.SOCKET; }
  183. "TCP"|"UDP"|"HTTP/2" { return sym.PROTOCOLO; }
  184. "AES"|"RSA"|"SSL" { return sym.ENCRIPTACION; }
  185. "SHA-256"|"MD5" { return sym.HASH; }
  186. "CSRF_TOKEN"|"nonce" { return sym.TOKEN_SEGURO; }
  187. "HttpOnly"|"Secure" { return sym.COOKIE_HTTP_ONLY; }
  188. "sanitize()"|"escape()" { return sym.XSS; }
  189. "preparedStatement"|"ORM" { return sym.SQLI; }
  190. "npm install"|"pip install" { return sym.DEPENDENCY; }
  191. "package.json"|"node_modules" { return sym.PAQUETE_NPM; }
  192. ".jar"|".war"|".dll" { return sym.ARTIFACT; }
  193. "npm registry"|"Maven Central" { return sym.REGISTRY; }
  194. "1.2.3"| "^2.0.0" { return sym.VERSION_SEM_VER; }
  195. "ESLint"|"Pylint" { return sym.LINTER; }
  196. "Prettier"|"Black" { return sym.FORMATTER; }
  197. "Webpack"|"Rollup" { return sym.BUNDLER; }
  198. "uglify-js"|"terser" { return sym.MINIFICACION; }
  199. "core-js"|"babel-polyfill" { return sym.POLYFILL; }
  200. "Babel"|"TypeScript" { return sym.TRANSPILADOR; }
  201. ": string"|"interface" { return sym.TYPE_ANNOTATION; }
  202. "<T>"|"extends keyof" { return sym.GENERICO_TS; }
  203. "@Decorator"|"experimentalDecorators" { return sym.DECORADOR_TS; }
  204. "namespace"|"declare module" { return sym.NAMESPACE_TS; }
  205. "Partial<T>"|"Pick<T>" { return sym.UTILITY_TYPES; }
  206. "never"|"unknown" { return sym.NEVER_TYPE; }
  207. "T extends U ? X : Y" { return sym.CONDICIONAL_TYPE; }
  208. "{ [K in keyof T]: ... }" { return sym.MAPPED_TYPE; }
  209. "`Hello ${name}`" { return sym.TEMPLATE_LITERAL; }
  210. "as"|"!" { return sym.ASERCION; }
  211. "const enum"|"declare enum" { return sym.CONST_ENUM; }
  212. "implements A"|"B"|"mixin" { return sym.HERENCIA_MULTIPLE; }
  213. "function overload"|"@overload" { return sym.SOBRECARGA; }
  214. "Singleton"|"Factory" { return sym.PATRON; }
  215. "@Inject"|"Dependency Injection" { return sym.INYECCION; }
  216. "@FeignClient"|"@KafkaListener" { return sym.MICROSERVICIO; }
  217. "application.properties"|".env" { return sym.CONFIG; }
  218. "process.env"|"os.getenv()" { return sym.VARIABLE_ENTORNO; }
  219. "-h"|"--version"|"--help" { return sym.CLI; }
  220. "argv"|"args" { return sym.ARGUMENTO; }
  221. "--force"|"--dry-run" { return sym.FLAG; }
  222. "|>" { return sym.PIPELINE; } // Suponiendo que el operador pipeline es "|>"
  223. "2>&1"|" >> log.txt" { return sym.REDIRECCION; }
  224. "~"|"VAR"|"VAR"|"{VAR}" { return sym.EXPANSION; }
  225. "*.txt"|"?" { return sym.COMODINES; }
  226. "^[A-Z]"|"\\d{3}" { return sym.EXPRESION_REGULAR; }
  227. "<<EOF"|"EOF" { return sym.HEREDOC; }
  228. "alias ll='ls -l'" { return sym.ALIAS_SHELL; }
  229. "function greet() { ... }" { return sym.FUNCION_SHELL; }
  230. "trap"|"EXIT" { return sym.TRAP; }
  231. "jobs"|"fg"|"bg" { return sym.JOB_CONTROL; }
  232. "SIGKILL"|"SIGSTOP" { return sym.SENAL_SHELL; }
  233. "$( ... )"|"` ... `" { return sym.SUBSHELL; }
  234. "arr=(1 2 3)"|"${arr[@]}" { return sym.ARREGLO_BASH; }
  235. "if [ -f file ]; then ..." { return sym.CONDICIONAL_SHELL; }
  236. "for i in {1..10}; do ..." { return sym.BUCLE_SHELL; }
  237. "case $var in ... esac" { return sym.CASE_SHELL; }
  238. "BEGIN"|"END"|"NR" { return sym.FUNCION_AWK; }
  239. "s/old/new/g"|"-i" { return sym.COMANDO_SED; }
  240. "$1 > 10"|"{ print $2 }" { return sym.EXPRESION_AWK; }
  241. "ggplot2"|"matplotlib" { return sym.PLOT; }
  242. "pandas"|"DataFrame" { return sym.DATA_FRAME; }
  243. "datetime"|"resample()" { return sym.SERIE_TEMPORAL; }
  244. "mean()"|"std()" { return sym.ESTADISTICA; }
  245. "fit()"|"predict()" { return sym.ML; }
  246. "tf.Tensor"|"torch.tensor()" { return sym.TENSOR; }
  247. "Dense"|"Conv2D" { return sym.RED_NEURONAL; }
  248. "Adam"|"SGD" { return sym.OPTIMIZADOR; }
  249. "MSE"|"CrossEntropy" { return sym.LOSS; }
  250. "cuda()"|"to('cuda')" { return sym.GPU; }
  251. "Dataset"|"DataLoader" { return sym.DATASET; }
  252. "StandardScaler"|"MinMax" { return sym.NORMALIZACION; }
  253. "Pipeline"|"ColumnTransformer" { return sym.PIPELINE_ML; }
  254. "cross_val_score"|"KFold" { return sym.VALIDACION; }
  255. "accuracy"|"F1-score" { return sym.METRICA; }
  256. "KMeans"|"DBSCAN" { return sym.CLUSTERING; }
  257. "LinearRegression"|"Ridge" { return sym.REGRESION; }
  258. "LogisticRegression"|"SVM" { return sym.CLASIFICACION; }
  259. "DecisionTree"|"RandomForest" { return sym.ARBOL; }
  260. "XGBoost"|"LightGBM" { return sym.BOOSTING; }
  261. "Tokenizer"|"BERT" { return sym.NLP; }
  262. "Word2Vec"|"GloVe" { return sym.EMBEDDING; }
  263. "OpenCV"|"YOLO" { return sym.CV; }
  264. "Tesseract"|"pytesseract" { return sym.OCR; }
  265. "Flask"|"Django REST" { return sym.API_REST; }
  266. "type Query"|"resolver" { return sym.GRAPH_QL; }
  267. "wasm"|"WebAssembly.instantiate()" { return sym.WEB_ASSEMBLY; }
  268. "Smart Contract"|"Solidity" { return sym.BLOCKCHAIN; }
  269. "ERC20"|"approve()" { return sym.TOKEN_ERC20; }
  270. "ERC721"|"mint()" { return sym.NFT; }
  271. "Metamask"|"Private Key" { return sym.WALLET; }
  272.  
  273. // sintáctico
  274. "try" { return sym.TRY; } // Token 236
  275. "catch" { return sym.CATCH; } // Token 237
  276. "class" { return sym.CLASS; } // Token 235
  277.  
  278. // Comentarios
  279. "/*" { yybegin(COMENTARIO); }
  280. "//".* { /* Ignorar comentarios de línea */ }
  281.  
  282. // Manejo de saltos de línea PRIMERO
  283. {LineTerminator} { currentLine++; currentColumn = 1; }
  284.  
  285. // Espacios en blanco (sin incluir saltos de línea)
  286. {WhiteSpace} { /* Ignorar espacios */ }
  287.  
  288. // Identificadores y literales
  289. {Identificador} { return sym.IDENTIFICADOR; }
  290. // Literales (números y strings)
  291. {Entero} { return sym.VALOR; } // Entero como VALOR
  292. {Decimal} { return sym.VALOR; } // Decimal como VALOR
  293. \"[^\"]*\" { return sym.VALOR; } // String como VALOR
  294.  
  295.  
  296. // Manejo de errores
  297. . { return sym.ERROR; }
  298. }
  299.  
  300. <COMENTARIO> {
  301. "*/" { yybegin(YYINITIAL); }
  302. [^*]+ { /* Ignorar contenido */ }
  303. "*" { /* Ignorar asteriscos */ }
  304. }
  305.  
  306. <<EOF>> { return null; }
Tags: Java jflex jcup
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement