2012-03-05 18 views
5

En primer lugar, ¿son iguales las reglas semánticas y las reglas del árbol de sintaxis abstracta?Reglas semánticas/Reglas del árbol de sintaxis abstracta

Ahora, si tengo unas especificaciones de idioma, y ​​tengo CFG, ¿cómo hago para construir reglas de árbol de sintaxis abstracta? Se agradece cualquier fuente. Gracias.

Respuesta

3

Las reglas del "Árbol sintáctico abstracto" (esta es una terminología extraña) pueden interpretarse como aquellas reglas que dan forma a la construcción de la sintaxis abstracta a medida que avanza el análisis. Estos suelen ser escritos, en una regla gramatical para un no terminal T, como constructores sobre los árboles de sintaxis abstracta producidos mediante el análisis de las frases subsidiarios de T. Si

T = '(' A ';' B ')' ; 

es una regla gramatical, un constructor de AST para T podría ser

T(A,B) 

que implica la construcción de un nodo T con niños que son los AST construidos para los subparáres A y B.

Las reglas semánticas son restricciones que el programa debe cumplir para ser legal, más allá de la mera sintaxis. Entonces uno puede construir un árbol sintáctico abstracto (a partir de "reglas"); hacerlo solo demuestra que el programa es sintácticamente correcto. Pero la sintaxis abstracta puede decir cosas que son simplemente sin sentido semántico, por ejemplo,

"declare s as function; ... s=7; ..." 

La única manera de comprobar esto, en general, es caminar sobre el árbol de sintaxis abstracta, la recogida de datos a nivel local (por ejemplo, "s es una función "es un hecho extraído de la declaración de declaración;" s se le asigna un número entero "se recopila de la asignación) y la propagación de esos hechos hasta que se encuentran y se muestra que son (en) compatibles.

0

Para responder a su segunda pregunta, aquí hay un artículo que vincula los conceptos de una gramática y un árbol de sintaxis, y examina algunos algoritmos de análisis sintáctico.

http://www.cs.purdue.edu/homes/xyzhang/spring11/notes/ast.pdf

Desde el artículo:

The resulting grammar is called the concrete grammar. 
The corresponding derivation tree is called the parse tree. 

Un árbol de sintaxis concreta o árbol de análisis sintáctico es un árbol que representa la estructura sintáctica de una cadena de acuerdo con alguna gramática formal.

Aquí hay un enlace a un ejemplo derivación de un árbol de análisis sintáctico de una gramática:

http://www.cs.rochester.edu/~nelson/courses/csc_173/grammars/parsetrees.html

que también pone de relieve el problema de tratar con las gramáticas ambiguas.

Cuestiones relacionadas