lo que se necesita una base de datos de palabras clave con características de esas palabras clave (definición, estructuras de control, etc.), así como una lista de operadores, caracteres especiales que se usarían en toda la estructura de idiomas (p. ej. (}
, *
, ||
) y una lista de patrones regex.
La mejor opción, para reducir las iteraciones, sería buscar en las palabras clave/operadores/caracteres. Utilizando una fórmula espacial/de frecuencia, solo comience una t texto que puede ser un idioma, basado en el valor de la fórmula devuelta. Luego, se trata de identificar qué idioma es y dónde termina.
Dado que muchos idiomas tienen un código similar, esto podría ser difícil. ¿Qué idioma es el siguiente?
for(i=0;i<10;i++){
// for loop
}
Sin el comentario podría tratarse de muchos tipos diferentes de idiomas. Con el comentario, al menos podría descartar Perl, ya que usa #
como el carácter de comentario, pero aún podría ser JavaScript, C/C++, etc.
Básicamente, tendrá que hacer muchas búsquedas recursivas para identificar el código correcto, lo que significa que si quieres algo rápido, necesitarás una bestia de una computadora o grupo de computadoras. Además, la fórmula de búsqueda y la fórmula de identificación deberán estar bien definidas para cada idioma.
La identificación del código sin las llamadas a la biblioteca adecuadas o inclusiones puede ser imposible, a menos que se indique que podría pertenecer a muchos idiomas, para lo cual necesitará una biblioteca de sintaxis.
¿Qué tan confiable quiere que sea esto (cuántos falsos positivos o falsos negativos quiere permitir)? ¿Realmente desea saber * si * hay algún código fuente en algún lugar de su texto, o desea ubicarlo y delinearlo del resto del texto? –
No creo que haya una manera mágica de hacerlo, ya que el código está intercalado con "texto normal", y probablemente sea casi imposible estar 100% en lo cierto. (Pero nunca digas nunca). –
Por supuesto que habrá un falso positivo. Es imposible evitar eso. Sí, solo quiero saber si hay algún código fuente en algún lugar de mi texto. No necesito localizarlo. Saber es suficiente para mi caso. – Kerem