• Lunes 29 de Abril de 2024, 21:17

Autor Tema:  Compilador Xml  (Leído 2412 veces)

yhauxX

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Compilador Xml
« en: Martes 6 de Junio de 2006, 20:30 »
0
Hola

Mi problema en este caso es ke soy estudiante de ing informatica y me han dado un proyecto de curso el cual consiste en hacer un compilador para xml ....el lenguaje en l ke siempre he trabajado es el C++, entonces, como herramienta para la generación de  la parte lexica y semantica me han dado el YAACC o ParserGenerator el cual no se como trabaja ...he logrado hacer algunas cosas como la parte lexica con la validacion de errores y todo (lexer) ....mi problema es la semantica (parser) que no tengo ni idea de como levantar todo el sistema de errores ke pueden surgir con la gramatica del problema

Quisiera ke si alguien pudiera ayudarme con un ejemplo o una explicacion detallada de como hacerlo estaria eternamente agradecido,aki les adjunto lo ke he hecho de la parte d parser la validacion de errores se haria en cada definicion de gramatica
[size=109]YHAUXELL [/size]

Universidad de las Ciencias Informaticas, Cuba

yhauxX

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Compilador Xml
« Respuesta #1 en: Martes 6 de Junio de 2006, 20:34 »
0
Parece ke no se adjunto esto es lo ke tenia el fichero:

%{
/****************************************************************************
myparser.y
ParserWizard generated YACC file.

Date: jueves, 01 de junio de 2006
****************************************************************************/

#include "mylexer.h"
%}





%union
{
   struct { int type;} type_exp;
   struct { int entry;} symbol;
}



/////////////////////////////////////////////////////////////////////////////
// declarations section

// attribute type
%include {
#ifndef YYSTYPE
#define YYSTYPE int
#endif
}




// place any declarations here

// tokens
//%type <type_exp> atributos
            /*tag_ap_decl  //tag de apertura de declaracion del xml
                 tag_ci_decl  //tag de cierre de declaracion del xml
                 tag_ap       //tag de apertura de xml
                 tag_ci       //tag de cierre de xml
                 tag_ap_com   //tag de apertura de comentarios
                 tag_ci_com   //tag de cierre de comentarios            
             */
            
%token <symbol> ID
//               NUM
               LITERAL

%token XML
%token ENCODING
%token VERSION
%token COMI
%token COMF
%token XMLI
%token XMLF
//%right '='            // operador relacional derecho
//%left  '/'          // operadores relacionales  izquierdos    




// parser name
%name myparser

// class definition
{
   private:
   
      Lexer* lexer;
      
      Programa programa;
     
      int j;
      
      TableSymbols ts;
   
      Errors errors;
      
      int type;
     
      
   public:
      void Init(Lexer* lexer,Program& , TableSymbols& ts, Errors&);
      void yyerror(char* text);
      void yysyntaxerror();

}


%%

/////////////////////////////////////////////////////////////////////////////
// rules section


// place your YACC rules here (there must be at least one)

//Grammar

documento:            declaracion_xml cuerpo
                        ;

declaracion_xml:      XMLI XML atribXML XMLF
                  ;

atribXML:            VERSION '=' ver | ENCODING '=' code | VERSION '=' ver ENCODING '=' code
                  ;

ver:               "1.0"|"1.1"
                  ;


code:               "ISO-8859-1" | "US-ASCII" | "UTF-8" | "UCS-2" | "EUC-JP"|"ISO-8859-2"
                        |"ISO-8859-3"|"ISO-8859-4"|"ISO-8859-5"|"ISO-8859-6"|"ISO-8859-7"|"UTF-7"
                        ;



cuerpo:               etiqueta
                  |;


etiqueta:            comentario etiqueta comentario '<' reservada '>' comentario etiqueta comentario LITERAL comentario'<''/' reservada '>'
                  |'<' reservada '/''>'
                        ;
                           
reservada:            ID atributos
                  ;


atributos:            atributos ID '=' '\"' LITERAL '\"'
                  |;

   
comentario:            COMI LITERAL COMF|;

%%

/////////////////////////////////////////////////////////////////////////////
// programs section


void Parser::Init(Lexer* lexer, Program& programa, TableSymbols& ts, Errors& errors)
{
   this->programa = programa;
   this->ts = ts;
   this->lexer = lexer;
   this->errors = errors;
   j = 0;
   yycreate(lexer);
}


void Parser::yyerror(char* text)
{
   errors.AddSemanticError(lexer->yylineno,text, lexer->yytext);
}





void Parser::yysyntaxerror()
{
   errors.AddSyntaxError(lexer->yylineno,lexer->yytext);
}
[size=109]YHAUXELL [/size]

Universidad de las Ciencias Informaticas, Cuba