16
MANUAL FLEX Y BISON EN QT UNIVERSIDAD DE SAN CARLOS DE GUATEMALA Organización de lenguajes y Compiladores 1

Manual Flex y Bison en Qt

Embed Size (px)

DESCRIPTION

Manual de Flex y Bison en QT ejemplo basico.

Citation preview

Page 1: Manual Flex y Bison en Qt

MANUAL FLEX Y BISON

EN QT

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA

Organización de lenguajes y Compiladores 1

Page 2: Manual Flex y Bison en Qt
Page 3: Manual Flex y Bison en Qt
Page 4: Manual Flex y Bison en Qt
Page 5: Manual Flex y Bison en Qt
Page 6: Manual Flex y Bison en Qt

%{ #include "scanner.h" #include <iostream> #include <QString> extern int yylineno; extern int columna; extern char *yytext; int yyerror(const char* mens) { std::cout <<mens<<" "<<yytext<< std::endl;

Page 7: Manual Flex y Bison en Qt

return 0; } %} %union{ char STR [256]; } %token<STR> Niden %token<STR> Nnum %% S: Lista { std::cout<<"fin"<<std::endl; }; Lista: Lista K | K; K : Niden { std::cout<<$1<<std::endl; } |Nnum { std::cout<<*$1<<std::endl; }; %%

Page 8: Manual Flex y Bison en Qt
Page 9: Manual Flex y Bison en Qt

%option noyywrap %{ #include "parser.h" #include <iostream> #include <QString> int columna=0; %} letra [a-zñA-ZÑ] digito [0-9] iden {letra}+

Page 10: Manual Flex y Bison en Qt

Numero {digito}+ %% {iden} { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Niden; } {Numero} { columna=columna+strlen(yylval.STR); strcpy(yylval.STR, yytext); return Nnum; } [[:blank:]] { /*Se ignoran los espacios en blanco */ } . { std::cout <<yytext<<"Error Lexico "<< std::endl; } %%

Page 11: Manual Flex y Bison en Qt
Page 12: Manual Flex y Bison en Qt

luci@luci-laptop:~$ cd EjemploQT/M2parser/ luci@luci-laptop:~/EjemploQT/M2parser$ flex --header-file=scanner.h -o scanner.cpp lexer.l luci@luci-laptop:~/EjemploQT/M2parser$ bison -o parser.cpp --defines=parser.h parser.y

Page 13: Manual Flex y Bison en Qt
Page 14: Manual Flex y Bison en Qt

#include <stdio.h> #include <stdlib.h> extern int yyrestart( FILE* archivo); extern int yyparse();

FILE* input = fopen("/home/luci/prueba.txt" , "r" ); yyrestart(input); yyparse();

Page 15: Manual Flex y Bison en Qt
Page 16: Manual Flex y Bison en Qt