lunes, 20 de diciembre de 2010

Microsoft actualiza su antivirus gratuito Security Essentials

Microsoft anuncia la disponibilidad de su software gratuito de seguridad Microsoft Security Essentials, versión 2.0.

Para los seguidores de Microsoft ésta nueva version de Microsoft Security Essentials 2.0 incorpora un motor de búsqueda mejorado, que resultaría en una detección acelerada de malware.

Este programa es compatible con el cortafuegos de Windows, lo que facilita el control y administración centralizados. Además está estrechamente integrado con Internet Explorer, de forma que el programa puede detectar enlaces peligrosos durante la navegación por Internet.

Security Essentials es totalmente gratuito para usuarios particulares y empresas con un máximo de 10 estaciones de trabajo.


Fuente
: http://www.diarioti.com/gate/n.php?id=28337


Microsoft Security Essentials, versión 2.0.
link de descarga

martes, 14 de diciembre de 2010

ANÁLISIS SINTÁCTICO


¿Qué es el analizador sintáctico?


Es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramática dada. Y en caso de que el programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce.

En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico.


En la práctica, el analizador sintáctico también hace:


• Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico).

• Chequeo de tipos (del analizador semántico).

• Generar código intermedio.

• Generar errores cuando se producen.

Gramática: G (N, T, P, S)

N = No terminales.

T = Terminales.

P = Reglas de Producción.

S = Axioma Inicial.


Ejemplo : Se considera la gramática que reconoce las operaciones aritméticas.


E → E + T

| T

T → T * F

| F

F → ID

| NUM

| ( E )


En el que: N = {E, T, F} están a la izquierda de la regla.

T = {ID, NUM, ( ,) ,+ ,*}

P = Son las siete reglas de producción.

S = Axioma inicial. Podría ser cualquiera, en este caso es E.

Derivaciones: La idea central es que se considera una producción como una regla de reescritura, donde el no terminal de la izquierda es sustituido por la cadena del lado derecho de la producción.


  • Derivación por la izquierda: Derivación donde solo el no terminal de más a la izquierda de cualquier forma de frase se sustituye en cada paso.
  • Derivación por la derecha o Derivación canónica: Derivación donde el no terminal más a la derecha se sustituye en cada paso.


Ejemplo: Sea la gramática

E Ú E + E

| E - E

| E * E

| E / E

| E ^ E

| id


Constrúyase una derivación por la izquierda y por la derecha para la siguiente frase:

a * c + b ( id1 * id2 + id3)


Derivación más a la izquierda:

E <>

_ _ _ _ _


Derivación más a la derecha::

E <>


Tipos de Análisis

De la forma de construir el árbol sintáctico se desprenden dos tipos o clases de analizadores sintácticos. Pueden ser descendentes o ascendentes.


1. Analizador sintáctico descendente (Top-Down-Parser): un analizador puede empezar con el símbolo inicial e intentar transformarlo en la entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes cada vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC.

· Con retroceso.

· Con recursión.

· LL(1)


  • Análisis descendente con retroceso.

Objetivo : El método parte del axioma inicial y aplica todas las posibles reglas al

no terminal más a la izquierda.


Ejemplo: Utilizaremos la siguiente gramática (No recursiva por la izquierda)

E → T + E

E → T

T → F * T

T → F

F → a

F → b

F → (E)

para reconocer la cadena de entrada: (a + b) * a + b



Mediante este árbol se pueden derivar todas las posibles sentencias reconocibles por esta gramática y el objetivo de este algoritmo es hacer una búsqueda en este árbol de la rama que culmine en la sentencia a reconocer. El mecanismo funciona mediante una búsqueda primero en profundidad.

Mira si todos los tokens a la izquierda de un No Terminal coinciden con la cabeza de la secuencia a reconocer.

En todo el árbol de derivaciones, se pretende profundizar por cada rama hasta llegar a encontrar una forma sentencial que no puede coincidir con lo que se busca, en cuyo caso se desecha, o que coincide con lo buscado, momento en que se acepta la sentencia. Si por ninguna rama se puede reconocer, se rechaza la sentencia.


2. Analizador sintáctico ascendente (Bottom-Up-Parser): un analizador puede empezar con la entrada e intentar llegar hasta el símbolo inicial, intuitivamente el analizador intenta encontrar los símbolos más pequeños y progresivamente construir la jerarquía de símbolos hasta el inicial, los analizadores LR funcionan así y un ejemplo es el Yacc.

· Con retroceso.

· LR(1)

  • Análisis Ascendente con retroceso.

Cuando se da cuenta que llega a una situación en la que no puede continuar, entonces vuelve atrás deshaciendo todos los cambios.

En el análisis con retroceso no se permiten las reglas J, puesto que estas se podrán aplicar de forma indefinida.


Ejemplo: Reconocer a*a _ id * id, dada la siguiente gramática:

E → E + T

E → T

T → T * F

T → F

F → (E)

F → id

F → num

(Llevaremos una pila para el Backtraking)



Diferencias:

Análisis ascendente: Construyen el árbol sintáctico de las hojas hacia la raíz.

Análisis descendente: Construyen el árbol sintáctico de la raíz hacia las hojas.


Fuentes:


http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2007/tema4.pdf

http://www.infor.uva.es/~teodoro/Ejer3-3.pdf

http://es.wikipedia.org/wiki/Gram%C3%A1tica_libre_de_contexto#Derivaciones_y_.C3.A1rboes_sint.C3.A1cticos

http://www.lcc.uma.es/~galvez/ftp/tci/tictema3.pdf