Pregunta

Me preguntaba cómo stackoverflow analiza todo tipo de códigos e identifica las diferentes palabras clave, caracteres especiales, espacios en blanco de formato, etc. Lo hace para la mayoría del código que creo, y me he dado cuenta de que es aún lo suficientemente sofisticados como para comprender las relaciones entre todo se analiza, así:

String mystring1 = "inquotes"; //incomment
String mystring2 = "inquotes//incomment";
String mystring3 = //incomment"inquotes";

Muchos IDE hacen esto también. ¿Cómo se hace esto?

Edit: Además explicación - no estoy preguntando por el análisis del texto, mi pregunta es, una vez que estoy pasado esa parte .. ¿hay algo así como un esquema universal XML, o jerarquía formato de código de cruz que describe qué cadenas son palabras clave, que denotan los comentarios caracteres, cadenas de texto, operadores lógicos, etc. o tengo que ser un gurú de la sintaxis de cualquier idioma que deseo analizar con precisión?

¿Fue útil?

Solución

Para realmente tiene su IDE / compilador / intérprete de "comprender" y el código de colorear tendrá que analizarlo y sacar las diferentes partes sintácticas. La referencia clásica para esto es el Dragón libro, "Compiladores: Principios, Técnicas y Herramientas ". Se puede ver algo de la dificultad de construcciones como esto

i+++++i; 

o

list<list<hash<list<int>,hash<int,<list>>>>>;
//or just matching parens 

correctamente haciendo esto es un dura < a href = "http://www.delorie.com/gnu/docs/emacs/cc-mode_34.html" rel = "nofollow noreferrer"> problema . Algunos lenguajes, como Java, hacen que este sea más fácil que otros, tales como C y C ++ (que ambos tienen estándares) o Ruby (que ni siquiera tienen una especificación y se basa en la aplicación como una especificación). Sin embargo, si sólo quiere hacer algunas cosas de relieve puede omitir grandes partes de la gramática y obtener una solución al 80% con mayor facilidad. Sospecho que el motor de modo de reconocer las cadenas y unos cuantos tipos diferentes de comentarios y esto lo hace lo suficientemente bien para su propósito.

La dificultad entre el 80% y el 100% es una de las razones que la mayoría de los IDE resaltado de sintaxis para C ++ Visual C ++, pero todavía no tiene C ++ refactorización apoyo. Para poner de relieve algunos errores son probablemente bien. Cuando estás refactorización es necesario entender realmente el alcance variable en diferentes espacios de nombres y todo tipo de cosas puntero también.

Otros consejos

correctamente resaltar un idioma, usted tiene que construir un árbol de análisis . Para ello es necesario primero tokenizar la cadena, y luego realizar ya sea una de arriba hacia abajo o de un análisis sintáctico de abajo hacia arriba. Después, algo anda el árbol y pone de relieve las partes de la cadena original correspondiente a los nodos de un cierto tipo.

Para realmente entender esto, vas a tener que leer un libro sobre el diseño del compilador / programación fundamentos del lenguaje. Los temas son relevantes tokenizers , análisis y gramáticas .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top