Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

273
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda