Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1322
I Semestre 2011
[<=] [home] [<>] [\/] [=>]
CI-1322 Autómatas y compiladores

Tarea #2 [solución]

Extractror de tokens para documentos XML

      Implemente la función "yylex()" en lenguaje C (no en C++). Esta función usa un gran vector que contiene el texto completo de un documento XML cuyo primer caracter está en la posición "yytext". La variable "cursor" comienza desde "yytext" y avanza hacia adelante hasta llegar al último caracter del docuemnto XML marcado con el caracter de fin de hilera "(char)(0)". Retorna un código que es el número del siguiente token reconocido, de longitud "yyleng", de manera que es posible extraer del vector "yytext" el siguiente lexema comenzando en "cursor" y tomando "yyleng" caracteres. En la variable "yyline" queda el número de línea que comienza en cero. Este es el encabezado de la función:
      int yylex( char const** cursor, char const** yytext, int* yyleng, int* yyline );

      Para demostrar que su rutina funciona, escriba un programa que reciba un documento XML y le extraiga todos los tokens.

<?xml version="1.0" encoding="Windows-1252"?>
<record REL_ID="0205" REL_SUB="0102" REL_TYPE="e" ATTRIB="2220022" VAL="">
    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20090615" />
    <attrib REL_TYPE="f" ATTRIB="5000004" VAL="325.15" />
</record>
Implemente la funci&oacute;n "&lt;code&gt;yylex()&lt;/code&gt;" en lenguaje C
(no en C++). Esta funci&oacute;n usa un gran vector que contiene
el texto completo de un documento XML cuyo primer caracter
est&aacute; en la posici&oacute;n "&lt;code&gt;yytext&lt;/code&gt;".

      Por ejemplo, para este documento XML, su programa produciría la siguiente secuencia de parejas token==>lexema:

<?      ==> <?
ID      ==> xml
ID      ==> version
'='     ==> '='
STRING  ==> "1.0"
ID      ==> encoding
'='     ==> '='
STRING  ==> "Windows-1252"
?>      ==> ?>
'<'     ==> '<'
ID      ==> record
ID      ==> REL_ID
'='     ==> '='
STRING  ==> "0205"
ID      ==> REL_SUB
'='     ==> '='
STRING  ==> "0102"
... etc ...
'>'     ==> >
CDATA   ==> Implemente la ... ext</code>".

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 1 semana
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2011
Derechos de autor reservados © 2011
[home] <> [/\]