Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

272
Vistas
Extraiga el flotante global del código con expresiones regulares

Estoy tratando de extraer todas las variables globales (p. ej., float) de un código determinado:

 float aaa = 3.0; float sat( float t ) { return clamp( t, 0.0, 1.0 ); } float bbb = 3.0; vec3 spectrum_offset( float t ) { float t0 = 3.0; return clamp( vec3( -t0, 1.0-abs(t0), t0), 0.0, 1.0); }

Mi resultado esperado es:

 float aaa = 3.0; float bbb = 3.0;

Probé con la siguiente expresión regular:

^\s*float\s+.*\s*=\s*.*;

Un ejemplo en línea en regexr.com

lo que me da el resultado:

 float aaa = 3.0; float bbb = 3.0; float t0 = 3.0;

Como puede ver, el último t0 está dentro del cuerpo de una función, por lo que este es el que no debe seleccionarse.

¿Cómo puedo descartar la variable dentro de cualquier cuerpo de función dejando solo las que están en el área global?

Cualquier consejo será apreciado, gracias :)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si bien esta respuesta no usa directamente expresiones regulares, publico esto como una solución alternativa para analizar lo que parece un código GLSL.

Expresiones regulares y lenguajes de programación de análisis

En general, intentar analizar cualquier cosa que se considere un lenguaje de programación utilizando expresiones regulares es un mal plan. Esto se debe a la complejidad de los idiomas, es decir, cosas como comentarios, alcance variable, caracteres de escape, etc.

Siempre es mejor usar un analizador creado para analizar el idioma. Por lo general, hay analizadores disponibles para muchos idiomas que crean un AST.

Resumen

  • Use un analizador construido para el lenguaje GLSL para construir un AST (árbol de sintaxis abstracta)
  • Las bibliotecas utilizadas son glsl-tokenizer y glsl-parser
  • El objeto de salida AST contiene una propiedad de scope que contiene una lista de globales.
  • Tenga en cuenta que en la muestra proporcionada, la función sat también se considera incluida en el scope
  • Filtramos esta lista buscando listas de declaración con solo tipos float .
  • Tenga en cuenta que la variable globals AST de salida incluye los números de línea y la posición de los globales encontrados.
 var tokenString = require('glsl-tokenizer/string'); var parseTokens = require('glsl-parser/direct') const code = ` float aaa = 3.0; float sat( float t ) { return clamp( t, 0.0, 1.0 ); } float bbb = 3.0; vec3 spectrum_offset( float t ) { float t0 = 3.0; return clamp( vec3( -t0, 1.0-abs(t0), t0), 0.0, 1.0); } `; const tokens = tokenString(code); const ast = parseTokens(tokens) function filterObject(obj, callback) { return Object.fromEntries(Object.entries(obj). filter(([key, val]) => callback(val, key))); } const globals = filterObject(ast.scope, x => ( x.parent.type === 'decllist' && x.parent.parent.token.data == "float" )); return globals;

La salida

Puede ver este código ejecutándose aquí: https://runkit.com/deanmarktaylor/find-global-variables-in-glsl-code

Aquí hay ejemplos de objetos de salida, tenga en cuenta el número de línea y la posición que podrían ser útiles. ingrese la descripción de la imagen aquí

Otras lecturas

Si busca hacer algo más que simplemente saber dónde están las variables en el código y manipular estas variables encontradas... En lugar de manipular la cadena de las variables float globales encontradas, puede encontrar que es mejor usar el AST, ajustarlo y luego generar el código del AST.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda