title: flex/bison line 25: syntax error at '' . last line of the file
body: <p>Im trying to compile a flex proyect, but I always get the same error, I search in all SO, and try most of the solutions, like using a token &lt;> and return 1 or 0, or call yywrap()... but without luck.</p>
  
  <p>And I dont see where is the error, I have 84 warnings of shifts/reduce conflicts but I that could be the problem.</p>
  
  <p>This is the tokens.l:</p>
  
  
  
  <pre><code>%option yylineno
  
  %{
   #include &lt;string&gt;
   #include &lt;iostream&gt;
   #include &lt;vector&gt;
   using namespace std ;
   #include "parser.hpp" 
  
   extern "C" int yywrap() { return(1); }
   #define TOKEN(t) processtoken(t, string(yytext, yyleng))
  
   void processtoken (int t, string id) {
     cout &lt;&lt; t &lt;&lt; " &lt;" &lt;&lt; id &lt;&lt; "&gt;" &lt;&lt; endl ;
   }
  
  %}
  
  %option nounput
  
  %%
  
  programa                                TOKEN(RPROGRAM);
  procedimiento                           TOKEN(RPROC);
  variables                               TOKEN(RVAR);
  si                                      TOKEN(RIF);
  entonces                                TOKEN(RTHEN);
  repetir                                 TOKEN(RREPEAT);
  hasta                                   TOKEN(RUNTIL);
  siempre                                 TOKEN(RALWAYS);
  salir                                   TOKEN(RSALIR);
  leer                                    TOKEN(RREAD);
  escribir_linea                          TOKEN(RWRITE);
  in                                      TOKEN(RIN);
  out                                     TOKEN(ROUT);
  entero                                  TOKEN(RENTERO);
  real                                    TOKEN(RREAL);
  
  
  [a-zA-Z](_?[a-zA-Z0-9])*                TOKEN(TID); 
  \$[a-zA-Z](\-{0,1}[a-zA-Z0-9])*\-?      TOKEN(TID);
  \$[a-zA-Z](\_{0,2}[a-zA-Z0-9])*         TOKEN(TID);
  \(\*([^*]|\*+[^*)])*\*+\)               ; 
  
  [ \t\n]                                 ;
  [0-9]+\.[0-9]*                          TOKEN(TDOUBLE);
  [0-9]+                                  TOKEN(TINTEGER); 
  [0-9]+\.[0-9]+([eE][-+]?[0-9]+)?        TOKEN(TREAL);
  
  "="                                     TOKEN(TASSIG);
  "=="                                    TOKEN(TEQUAL);
  "&gt;"                                     TOKEN(TCGT);
  "&gt;="                                    TOKEN(TCGE);
  "&lt;"                                     TOKEN(TCLT);
  "&lt;="                                    TOKEN(TCLE);
  "+"                                     TOKEN(TPLUS);
  "-"                                     TOKEN(TMINUS);
  "*"                                     TOKEN(TMUL);
  "/"                                     TOKEN(TDIV);
  "/="                                    TOKEN(TCNE);
  "("                                     TOKEN(TLPAREN);
  ")"                                     TOKEN(TRPAREN);
  "{"                                     TOKEN(TLBRACE);
  "}"                                     TOKEN(TRBRACE);
  ","                                     TOKEN(TCOMMA);
  ":"                                     TOKEN(TCOLON);
  ";"                                     TOKEN(TSEMIC);
  
  .                                       { cout &lt;&lt; "Token desconocido: " &lt;&lt; yytext &lt;&lt; endl; yyterminate();}
  
  %%
  </code></pre>
  
  
  
  <p>And this is the parser.y:
  </p>
  
  <pre><code>%{
     #include &lt;stdio.h&gt;
     #include &lt;iostream&gt;
     #include &lt;vector&gt;
     #include &lt;string&gt;
     using namespace std; 
  
     extern int yylex();
     extern int yylineno;
     extern char *yytext;
     string tab = "\t" ;
     void yyerror (const char *msg) {
       printf("line %d: %s at '%s'\n", yylineno, msg, yytext) ;
     }
  
  
  %}
  
  %union {
      string  *str ; 
  }
  
  %token &lt;str&gt; RPROGRAM RPROC RVAR RIF RTHEN RREPEAT RUNTIL
  %token &lt;str&gt; RALWAYS RSALIR RREAD RWRITE RENTERO RREAL
  %token &lt;str&gt; RIN ROUT
  
  %token &lt;str&gt; TID TDOUBLE TREAL TINTEGER
  
  %token &lt;str&gt; TASSIG TEQUAL TCGT TCGE TCLT TCLE TCNE
  %token &lt;str&gt; TPLUS TMINUS TMUL TDIV
  %token &lt;str&gt; TLPAREN TRPAREN TLBRACE TRBRACE TCOMMA TCOLON TSEMIC
  
  %type &lt;str&gt; programa
  %type &lt;str&gt; declaraciones
  %type &lt;str&gt; lista_de_ident
  %type &lt;str&gt; resto_lista_id
  %type &lt;str&gt; tipo
  %type &lt;str&gt; decl_de_subprogs
  %type &lt;str&gt; decl_de_subprograma
  %type &lt;str&gt; argumentos
  %type &lt;str&gt; lista_de_param
  %type &lt;str&gt; clase_par
  %type &lt;str&gt; resto_lis_de_param
  %type &lt;str&gt; lista_de_sentencias
  %type &lt;str&gt; sentencia
  %type &lt;str&gt; variable
  %type &lt;str&gt; expresion
  
  %left TPLUS TMINUS TMUL TDIV
  
  %start programa 
  
  %%
  
  programa :  RPROGRAM TID
          declaraciones
          decl_de_subprogs
          TLBRACE lista_de_sentencias TRBRACE
          ;
  
  
  declaraciones : RVAR lista_de_ident TCOLON tipo TSEMIC declaraciones
          | {}
          ;
  
  lista_de_ident : TID resto_lista_id
          ;
  
  resto_lista_id : TCOMMA TID resto_lista_id
          | {}
          ;
  
  tipo : RENTERO | RREAL
          ;
  
  decl_de_subprogs : decl_de_subprograma decl_de_subprogs
          | {}
          ;
  
  decl_de_subprograma : RPROC TID argumentos declaraciones
                      TLBRACE lista_de_sentencias TRBRACE
          ;
  
  argumentos : TLPAREN lista_de_param TRPAREN
          | {}
          ;
  
  lista_de_param : lista_de_ident TCOLON clase_par tipo resto_lis_de_param
          ;
  
  clase_par : RIN | ROUT | RIN ROUT
          ;
  
  resto_lis_de_param : TSEMIC lista_de_ident TCOLON clase_par tipo resto_lis_de_param
          | {}
          ;
  
  lista_de_sentencias : sentencia lista_de_sentencias
          | {}
          ;
  
  sentencia : variable TASSIG expresion TSEMIC
          | RIF expresion RTHEN TLBRACE lista_de_sentencias TRBRACE
          | RREPEAT TLBRACE lista_de_sentencias TRBRACE RUNTIL expresion TSEMIC
          | RREPEAT RALWAYS TLBRACE lista_de_sentencias TRBRACE
          | RSALIR RIF expresion
          | RREAD TLPAREN variable TRPAREN TSEMIC
          | RWRITE TLPAREN expresion TRPAREN TSEMIC
          ;
  
  variable : TID
          ;
  
  expresion : expresion TEQUAL expresion
          | expresion TCGT expresion
          | expresion TCLT expresion
          | expresion TCGE expresion
          | expresion TCLE expresion
          | expresion TCNE expresion
          | expresion TPLUS expresion
          | expresion TMINUS expresion
          | expresion TMUL expresion
          | expresion TDIV expresion
          | TID 
          | TINTEGER
          | TREAL
          | TLPAREN expresion TRPAREN
          ;
  </code></pre>
  
  
  
  <p>And the test program Im using to try all the tokens is the next one:</p>
  
  <pre><code>programa ejemplo
      variables a,b,c : entero;
      variables d,e : real;
  (* esto es un comentario *)
  
  procedimiento sumar (x,y: in entero; resul: in out entero) 
      variables aux:entero;
      {
          repetir {
              aux=x; 
              resul=y;
              aux = aux - 1;
              resul = resul+1;
          } hasta aux /= 0;
      }
  
  {
      leer(a); leer(b);
      d= 1/b;
      e= 1/a;
      sumar(a,b,c); (* los que hagan llamadas a procedimientos *)
      c= c*(c*d)+e;
      escribir_linea(c*c);
  }
  </code></pre>
  
  <p>I always get at the last line the error: line 25: syntax error at '', but I dont know what that means, because I have a token for spaces, the token of EOF doesnt work, I tried with &lt;&lt; EOF >> {yywrap();} but it doesnt finish.</p>