Universidad de Costa Rica
|
|
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ón "<code>yylex()</code>" 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 "<code>yytext</code>". |
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.
|
Adolfo Di Mare <adolfo@di-mare.com>.
|