Capítulo 3. Análisis morfológico

Analizador lexical, preprocesador, "scanner".

Genera una unidad sintáctica o un vector de unidades sintácticas.

Realiza la primera fase de la reducción al axioma de la gramática.

Elimina espacios en blanco y comentarios.

Lenguaje regular.

Unidades sintácticas:

Gramática de un analizador morfológico

Axioma: <US> (Unidad Sintáctica).

  <US> ::= <Id> | <PR> | <Numero> | <Literal> | <Caracter> |
           <SS> | <SM>
  <Id> ::= <Letra> | <Letra> <IdC>
  <IdC> ::= <Letra> <IdC> | <Cifra> <IdC> | <Letra> | <Cifra>
  <Numero> ::= <Entero> | <Real>
  <Entero> ::= <EnteroSS> | - <EnteroSS>
  <EnteroSS> ::= <Cifra> | <Cifra> <EnteroSS>
  <Real> ::= <PFijo> | <PFijo> <Exponente>
  <PFijo> ::= <Entero> . <EnteroSS> | . <EnteroSS> | <Entero> .
  <Exponente> ::= E <Entero>
  <Literal> ::= "" | " <Cadena> "
  <Cadena> ::= <Simbolo> | <Simbolo> <Cadena>
  <Caracter> ::= ' <Simbolo> '
  <SS> ::= + | - | * | / | = | < | > | ( | )
  <SM> ::= =+ | != | <= | >= | ++ | --
  <Simbolo> ::= <Letra> | <Cifra> | <SS> | ! | . | , | b |
                \' | \" | \n
  <Letra> ::= A | B | ... | Z | a | b | ... | z
  <Cifra> ::= 0 | 1 | ... | 9

Eliminación de espacios

Puede hacerse mediante una rutina semántica o mediante reglas sintácticas:

  <US> ::= b <US>
  <IdC> ::= b <IdC>
  etc.

Eliminación de comentarios

Puede hacerse mediante una rutina semántica o mediante reglas sintácticas:

  <Comentario> ::= /**/ | /* <Cadena> */

Autómata que realiza un analizador morfológico

Añadir análisis de comentarios.

Extraer la gramática tipo 3 del autómata.

Semántica del analizador morfológico

A cada regla de la gramática se le asocia una acción semántica, si hace falta.

Ejemplos:

  <Id> ::= f0 <Letra> f1 f2 <IdC> f3
  <IdC> ::= <Letra> f1 f2 <IdC> | <Cifra> f1 f2 <IdC> | ^
donde
  <Entero> ::= g0 <EnteroSS> | g0 - <EnteroSS> g2
  <EnteroSS> ::= <Cifra> g1 | <Cifra> g1 <EnteroSS>
donde

Resultado: N.

Funciones semánticas típicas:

Construir un programa en C.

Detección de errores morfológicos