domingo, 31 de octubre de 2010

Fobs4JMF in Windows XP and Netbeans

Looking for a way to play video in java I found a project called Fobs4JMF. It's a PlugIn which allows to use the wide range of formats supported by ffmpeg in your Java applications.
If you want to try that, you have to follow the next steps:
1. Install the latest JMF version
2. Download Fobs4JMF from here.
3. Extract in a folder (For example in C:\). See the screenshot:


2.Include C:\fobs4jmf_0.4.2_win32\fobs4jmf.jar and C:\fobs4jmf_0.4.2_win32\jmf.jar; into your java classpath environment variable (or include it directly in the command line invocation of java): If you have extracted in C:\ drive, then you can add directly this paths  
C:\fobs4jmf_0.4.2_win32\fobs4jmf.jar;C:\fobs4jmf_0.4.2_win32\jmf.jar; 
See the screenshot:


Thereafter, follow these steps:
1. Launch JMStudio (java JMStudio).
2. Go to File->Preferences
3. Enter the "Plugins" tab
4. In the "Demultiplexer" tab, add the class "com.omnividea.media.parser.video.Parser" and commit.


5. In the "Codec" tab, add the class "com.omnividea.media.codec.video.NativeDecoder" and commit.
6. In the "Codec" tab, add the class "com.omnividea.media.codec.audio.NativeDecoder" and commit.
7. In the "Codec" tab, add the class "com.omnividea.media.codec.video.JavaDecoder" and commit.


8. Go to the "Packages" tab
9. Include "com.omnividea" in both the Protocol Prefix and the Context Prefix list. Move both of them up to the first position. Commit both. See screenshot.


After these steps, the jmf plugin is installed in the system and will be used automatically when needed, not only by JMStudio but also by any program that uses the JMF plugin [1].

If you are using netbeans IDE you have to add fobs4jmf.jar to your classpath project. It should look like that:


Dont' forget to leave a comment.

Thermometer in Java with JFreeChart

Definitely one of the most interesting componentes of JFreeChart packet is the Thermometer. As part of my thesis I need to use that but when I tried it I managed to use it. It isn't very easy to find the way to use a thermometer component and If you want to get the source code, you have to purchase the JFreeChart Developer Guide. Much people haven't got a clue how to use it but in this post I'm going to show how we can use the thermometer en our projects, so they are going to look much better. I haven't read the licence and I can explain nothing about that, but looking for some examples on the net I found a page where the autor show the JFreeChart Demo source code decompiled by him. I supose the decompiling of jfreechart is not allowed, but really is well worth checking it.


Here is the source code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.rolandopalermo.telecontrol.test;

/**
 *
 * @author Rolando Palermo
 */
import java.awt.*;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.ThermometerPlot;
import org.jfree.data.general.DefaultValueDataset;
import org.jfree.data.general.ValueDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;


public class ThermometerDemo1 extends ApplicationFrame {
    
    static class ContentPanel extends JPanel implements ChangeListener {
        JSlider slider;
        DefaultValueDataset dataset;
        
        private static JFreeChart createChart(ValueDataset valuedataset) {
            ThermometerPlot thermometerplot = new ThermometerPlot(valuedataset);
            JFreeChart jfreechart = new JFreeChart("Thermometer Demo 1", JFreeChart.DEFAULT_TITLE_FONT, thermometerplot, true);
            thermometerplot.setInsets(new RectangleInsets(5D, 5D, 5D, 5D));
            thermometerplot.setPadding(new RectangleInsets(10D, 10D, 10D, 10D));
            thermometerplot.setThermometerStroke(new BasicStroke(2.0F));
            thermometerplot.setThermometerPaint(Color.lightGray);
            thermometerplot.setUnits(1);
            thermometerplot.setGap(3);
            return jfreechart;
        }

        public void stateChanged(ChangeEvent changeevent) {
                dataset.setValue(new Integer(slider.getValue()));
        }

        public ContentPanel() {
                super(new BorderLayout());
                slider = new JSlider(0, 100, 50);
                slider.setPaintLabels(true);
                slider.setPaintTicks(true);
                slider.setMajorTickSpacing(25);
                slider.addChangeListener(this);
                add(slider, "South");
                dataset = new DefaultValueDataset(slider.getValue());
                add(new ChartPanel(createChart(dataset)));
        }
    }

    public ThermometerDemo1(String s) {
        super(s);
        JPanel jpanel = createDemoPanel();
        setContentPane(jpanel);
    }

    public static JPanel createDemoPanel() {
        return new ContentPanel();
    }

    public static void main(String args[]) {
        ThermometerDemo1 thermometerdemo1 = new ThermometerDemo1("Thermometer Demo 1");
        thermometerdemo1.pack();
        thermometerdemo1.setVisible(true);
    }
    
}
Additionally you have to add these jars (They are in the /lib directory of the JFreechart folder) to your project's classpath:


You can see whole of the source code here http://code.google.com/p/bluelight/
You can get JFreechart project here http://sourceforge.net/projects/jfreechart/files/
That's all by now. I hope it useful.

Don't forget to leave a comment.

lunes, 25 de octubre de 2010

¿Quién fué el mejor James Bond?

Muchos de los que disfrutamos ver una y otra vez las películas de James Bond siempre nos hemos preguntado quién ha sido el mejor actor que ha interpretado el papel de este personaje creado por Ian Fleming. Si buscamos en internet hay muchos debates acerca de ello así como también muchas opiniones encontradas (Sobre todo con respecto al último James Bond, Daniel Craig). 

Una de las principales valoraciones que se le da a cada James Bond es el número de películas que este ha realizado. Es por esta razón que George Lazenby casi siempre es colocado en la posición número 6. Y es que Lazenby solo ha hecho une película de James Bond, me refiero a "Al servicio secreto de su majestad". Y es que no es el hecho de que Lazenby haya sido un mal James Bond, sino que solo ha hecho 1 solo película de las 23 que son tomadas como oficiales.


El siguiente es Sean Connery quien ha interpretado a James Bond en 7 oportunidades. Muchos consideran que él ha sido el mejor James Bond pues luego de filmar estas películas ha tenido una gran trayectoria cinematográfica en cintas con una trama similar a la de James Bond (como La Roca).


Otro factor que le da puntos a Connery es el hecho de haber sido el primer 007 del cine creando un prototipo de personaje (adicionalemente al del propio Bond creado por Fleming) que los otros actores tuvieron que seguir añadiendo cada uno lo suyo.

Roger Moore es otro de los que se perfila como el mejor James Bond, y esto debido a que es el actor que más veces ha encarnado al agente secreto británico, haciéndolo hasta en 7 oportunidades.


Así mismo, según mi opinión, no posee la frialdad del Bond que describe Fleming sino más bien es un tipo sarcástico, demostrando esto en muchas de sus películas. También es muy recordado por ser el que tuvo que enfrentarse en muchas oportunidades al casi inmortal Tiburón.

Ahora es el turno de Timothy Dalton quien tampoco a interpretado a Bond en muchas oportunidades (Solo 2 para ser exactos). Su popularidad en relación con su papel de Bond no es muy buena, ya que el igual que Lazenby, el corto número de películas hechas no le da tantas oportunidades frente el resto de actores.


Sin embargo las dos películas hechas son muy buenas y además ha demostrado tener cierta frialdad a la que no nos tenían acostumbrados Connery y Moore.

Ahora es el turno de otro James Bond, se podría decir el más popular entre gente cuya edad oscila entre los 17 y 30 años. Me refiero a Pierce Brosnan. Es considerado por muchos foros como el mejor James Bond ,pero esto es debido al hecho de que la mayoría de gente que usamos el internet tenemos esa edad (17-30) y asociamos automáticamente la imágen de Brosnan con el agente 007.


No digo que Brosnan haya sido un mal actor pues ha hecho grandes películas y reune casi todas las características de los otros actores pero al verlo pelear contra enemigos evidentemente más fuertes que él y verlo resistir tantos golpes hacía que las películas se vean demasiado fantasiosas. Por lo demás, un excelente actor y la imágen de James Bond para la gente de nuestra generación.

Y ahora es el turno del más discutido James Bond. Me refiero a Daniel Craig. Para mí es el mejor actor que haya realizado este papel pues es un tipo de sentimientos fríos, calculador que primero mata y luego pregunta, no es bromista y tiene las capacidades físicas de enfrentarse al mismísimo Tiburón.


El problema con las películas de Craig es que se han suprimido personas como Q o Miss Moneypenny así como a los autos equipados con lanzamisiles y los artefactos de última generación que si tenían las anteriores películas y se le ha dado (sobre todo en Casino Royal) un toque un poco más sentimental. Un dato curioso es que es recién en esta película que se muestra como James Bond adquiere su licencia para matar (00).

En fin, esa es mi opinión tan válida como la del resto de gente. Y para finalizar este post les dejo la lista de actores en función de la calidad con la que interpretaron a este mítico agente secreto 007.
1- Daniel Craig
2- Sean Connery
3- Pierce Brosnan
4- Roger Moore
5- Timothy Dalton
6- George Lazenby
 

Ahora solo nos queda esperar para cuando sea el estreno de Bond 23 que actualmente está suspendido indefinidamente y que contará con la actuación de Craig.


Aca les dejo también un video donde salen todos estos personajes.

domingo, 24 de octubre de 2010

Flex y Bison en un solo analizador

Anteriormente habiamos hablado acerca de la forma de configurar Flex (http://rolandopalermo.blogspot.com/2009/12/como-configurar-flex-en-windows-y-no.html) y también como hacerlo con Bison (http://rolandopalermo.blogspot.com/2010/01/configurando-bison-en-windows-para.html) pero hasta ahora no se había explicado la forma en cómo se puede hacer que ambas herramientas trabajen juntas. Bueno, este post abordará este tema ya que si bien es cierto que la configuración de estas herramientas es sencilla el hacerlos trabajar juntas no lo es tanto.

Bueno, lo primero que tenemos que hacer es tener nuestro Flex y Bison configurados como expliqué en los post anteriores. Luego de eso debemos tener nuestros archivos tanto para flex como para bison listos, claro que la forma de cómo se estructuran estos archivos no es parte de este post. Aca les voy a mostrar los archivos que usé para un proyecto de la universidad (Shark Analyzer 3.0) sobre un lenguaje de programación que estabamos definiendo. Antes que nada un screenshot de lo que es el analizador que hicimos.


Archivo para FLEX
%{
   #include <stdio.h>
   #include <conio.h>
   #include "parser.h"  
%}
%option noyywrap
%option yylineno
letra [a-zA-Z]
digito [0-9]
binario [0-1]
ignora " "|\t|\n
operarit *|+|-|/
operlog &|$
comparador <|>|<=|>=|==|!=
%%
{ignora}+                    {;}
"Entero"                     {printf("Palabra reservada para tipo de dato entero\n");return PRENTERO;}
"Real"                       {printf("Palabra reservada para tipo de dato real\n");return PRREAL;}
"Booleano"                   {printf("Palabra reservada para tipo de dato booleano\n");return PRBOOLEANO;}
"Caracter"                   {printf("Palabra reservada para tipo de dato caracter\n");return PRCARACTER;}
"Si"                         {printf("Palabra reservada para condicional\n");return PRSI;}
"Sino"                       {printf("Palabra reservada para otro condicional\n");return PRSINO;}
"SinoSi"                     {printf("Palabra reservada para definir condicionales secundarias\n");return PRSINOSI;}
"Entonces"                   {printf("Palabra reservada para definir accion a realizar\n");return PRENTONCES;}
"FinSi"                      {printf("Palabra reservada finalizar condicional\n");return PRFINSI;}
"Para"                       {printf("Palabra reservada para bucle de tipo Para\n");return PRPARA;}
"FinPara"                    {printf("Palabra reservada para fin de bucle de tipo Para\n");return PRFINPARA;}
"Mientras"                   {printf("Palabra reservada para bucle de tipo Mientras\n");return PRMIENTRAS;}
"Hacer"                      {printf("Palabra reservada para indicar que se empieza algo\n");return PRHACER;}
"FinMientras"                {printf("Palabra reservada fin de bucle de tipo Mientras\n");return PRFINMIENTRAS;}
"FinHacerMientras"           {printf("Palabra reservada para indicar fin de bucle Hacer-Mientras\n");return PRFINHACERMIENTRAS;}
"Funcion"                    {printf("Palabra reservada para declaracion de funciones\n");return PRFUNCION;}
"Estructura"                 {printf("Palabra reservada para declaracion de estructuras\n");return PRESTRUCTURA;}
"FinFuncion"                 {printf("Palabra reservada para finalizar funcion\n");return PRFINFUNCION;}
"Retorna"                    {printf("Palabra reservada para retorno de funcion\n");return PRRETORNA;}
"SinValor"                   {printf("Palabra reservada para funcion sin valor de retorno\n");return PRSINVALOR;}
"Definir"                    {printf("Palabra reservada para definir funciones\n");return PRDEFINIR;}
"Constante"                  {printf("Palabra reservada para definir constantes\n");return PRCONSTANTE;}
"Entrada"                    {printf("Palabra reservada para definir entradas\n");return PRENTRADA;}
"Salida"                     {printf("Palabra reservada para definir salidas\n");return PRSALIDA;}
{letra}({letra}|{digito})*   {printf("Identificador\n");return IDENT;}
{letra}+                     {printf("Caracter\n");return CARACTER;}
{binario}+                   {printf("Binario\n");return BOOLEANO;} 
{digito}+                    {printf("Entero\n");return ENTERO;}
{digito}+"."{digito}+        {printf("Real\n");return REAL;}
{comparador}                 {printf("Comparador\n");return COMPARADOR;}
":="                         {printf("Asignador\n");return ASIG;}
";"                          {printf("Fin sentencia\n");return PCOMA;}
"!="                         {printf("Diferente\n");return DIF;}
","              {printf("Coma\n");return COMA;}
"=="                         {printf("Igual\n");return IGUAL;}
"."                          {printf("Punto\n");return PTO;}
">="                         {printf("Signo mayor-igual\n");return MAIGU;}
"<="                         {printf("Signo menor-igual\n");return MEIGU;}
"("                          {printf("(\n");return PARIZ;}
")"                          {printf(")\n");return PARDE;}
">"                          {printf(">\n");return MAYOR;}
"<"                          {printf("<\n");return MENOR;}
"{"                          {printf("{\n");return LLIZ;}
"}"                          {printf("}\n");return LLDE;}
"+"                          {printf("+\n");return MAS;}
"-"                          {printf("-\n");return MENOS;}
"*"                          {printf("*\n");return POR;}
"/"                          {printf("/\n");return ENTRE;}
"&"                          {printf("&\n");return YLOG;}
"$"                          {printf("Operador Logico\n");return OLOG;}
.                            {printf("ERROR LEXICO EN LINEA %d \n",yylineno);}
%%
int main(int argc,char *argv[])
{
 if ((yyin = fopen(argv[1], "rt")) == NULL)
 {
  printf("\nNo se puede abrir el archivo: %s\n", argv[1]);
 }
 else
 {
  //yylex();
  yyparse();
 }
 fclose(yyin);
 return 0;
}
Lo único diferente con respecto al ejemplo que mostré en el post de configuración de flex es que ahora no invocaremos a la función yylex() sino que ahora se invocará a la función yyparse(). Adicionalmente vemos que en la cabecera se invoca a la librería "parser.h" la cuál debe contener las deficiones para cada toquen de nuestra gramática.
 
Arhcivo parser.h
#ifndef YYSTYPE
#define YYSTYPE int
#endif
#define PRENTERO 257
#define PRREAL         258
#define PRBOOLEANO 259
#define PRCARACTER 260
#define PRSI         261
#define PRSINO         262
#define PRSINOSI 263
#define PRENTONCES 264
#define PRFINSI         265
#define PRPARA         266
#define PRFINPARA 267
#define PRMIENTRAS 268
#define PRHACER         269
#define PRFINMIENTRAS 270
#define PRFINHACERMIENTRAS  271
#define PRFUNCION     272
#define PRFINFUNCION     273
#define PRRETORNA     274
#define PRSINVALOR     275
#define PRESTRUCTURA     276
#define MAS 277
#define MENOS 278
#define POR 279
#define ENTRE 280
#define OLOG 281
#define YLOG 282
#define PRDEFINIR 283
#define PRCONSTANTE 284
#define IDENT 285
#define ENTERO 286
#define REAL 287
#define BOOLEANO 288
#define CARACTER 289
#define COMPARADOR 290
#define ASIG 291
#define PCOMA 292
#define DIF 293
#define COMA 294
#define IGUAL 295
#define PTO 296
#define MAIGU 297
#define MEIGU 298
#define PARIZ 299
#define PARDE 300
#define MAYOR 301
#define MENOR 302
#define LLIZ 303
#define LLDE 304
#define PRSALIDA 305
#define PRENTRADA 306

extern YYSTYPE yylval;

Cone esto ahora debemos definir el archivo para bison.

Archivo para Bison:
%{
int yystopparser=0;
%}


%token PRENTERO PRREAL PRBOOLEANO PRCARACTER PRSI PRSINO PRSINOSI PRENTONCES PRFINSI PRPARA  
PRFINPARA PRMIENTRAS PRHACER PRFINMIENTRAS PRFINHACERMIENTRAS PRFUNCION PRFINFUNCION PRRETORNA PRSINVALOR PRESTRUCTURA MAS MENOS POR ENTRE OLOG YLOG  
PRDEFINIR PRCONSTANTE IDENT ENTERO REAL BOOLEANO CARACTER COMPARADOR ASIG PCOMA DIF COMA IGUAL PTO   
MAIGU MEIGU PARIZ PARDE MAYOR MENOR LLIZ LLDE PRSALIDA PRENTRADA
%start inicio

%%
inicio  : funcion
  | constante 
  | estructura
  ;

estructura : PRESTRUCTURA IDENT LLIZ n
n  : declaracion n
  | declaracion nn
nn  : LLDE IDENT PCOMA o
o  : estructura
  | constante
  | funcion
  ;

constante : PRDEFINIR PRCONSTANTE e
e  : PRENTERO IDENT f
  | PRREAL IDENT f
  | PRBOOLEANO IDENT f
f  : ASIG g
g  : ENTERO PCOMA y
  | REAL PCOMA y
  | BOOLEANO PCOMA y
y  : constante
  | estructura 
  | funcion  
  ; 

funcion  : PRFUNCION j
j  : PRENTERO k
  | PRREAL k
  | PRBOOLEANO k
  | PRCARACTER k
  | PRSINVALOR k
k  : IDENT PARIZ l
l  : kl
kl  : declaracion l
  | ll
ll  : PARDE sentencia m
m  : PRRETORNA IDENT p
  | p
p  : PRFINFUNCION funcion
  | PRFINFUNCION 
  ;

comparacion : IDENT COMPARADOR b
b  : IDENT
  | REAL
  | ENTERO
  | BOOLEANO
  ;

declaracion : PRENTERO c
  | PRREAL c
  | PRBOOLEANO c
  | PRCARACTER c
c  : IDENT PCOMA
  ;

asignacion  : IDENT ASIG a
a  : IDENT PCOMA
  | ENTERO PCOMA 
  | REAL PCOMA
  | BOOLEANO PCOMA
  | oparitmetica PCOMA
  ;

mientras : PRMIENTRAS PARIZ x
x  : comparacion y
  | oplogica y
y  : PARDE sentencia PRFINMIENTRAS
  ;

hacermientras : PRHACER sentencia PRFINHACERMIENTRAS PRMIENTRAS PARIZ cc
cc  : comparacion PARDE
  | oplogica PARDE
  ;

para  : PRPARA PARIZ asignacion comparacion PCOMA asignacion PARIZ sentencia PRFINPARA
  ;

si  : PRSI PARIZ sh
sh  : comparacion shh
  | oplogica shh
shh  : PARDE PRENTONCES sentencia h
h  : PRFINSI
  | PRSINOSI PARIZ comparacion PARDE PRENTONCES sentencia i
i  : h
  | z
z  : PRSINO PRENTONCES sentencia PRFINSI
  ;

sentencia : declaracion sentencia 
  | declaracion 
  | asignacion sentencia 
  | asignacion
  | mientras sentencia 
  | mientras
  | hacermientras sentencia 
  | hacermientras 
  | para sentencia
  | para
  | si sentencia 
  | si
  | entrada sentencia
  | entrada
  | salida sentencia
  | salida
  ;

salida  : PRSALIDA ASIG LLIZ LLDE PCOMA
  ;

entrada  : PRENTRADA IDENT PCOMA
  ;

oparitmetica : MAS PARIZ q
  | POR PARIZ q
  | suma
  | producto
q  : oparitmetica PARDE r
suma  : MAS r t
producto : POR r t
t  : r u
u  : t
  | 
r  : IDENT
  | REAL
  | ENTERO
  ;


oplogica : OLOG PARIZ qq
  | YLOG PARIZ qq
  | yy
  | oo
qq  : oplogica PARDE rr
oo  : OLOG rr tt
yy  : YLOG rr tt
tt  : rr uu
uu  : tt
  | 
rr  : comparacion 
  ;
Con esos tres archivos ya casi estamos listos. También dentro del directorio donde están trabajando (Directorio en donde se encuentra el archivo de flex y bison) deben crear el siguiente archivo:

Archivo error.c
void  yyerror(char * msg)
{
 printf ("%s\n", msg);
}

Ahora solo nos queda compilar los scripts de flex y bison del siguiente modo:

Con esto nuestro directorio de trabajo debería quedar algo así:


Ahora si usan DevC++ solo deben crear un proyecto y añadir todos los archivos ahí presentes. Observen además que para correr el programa no se nos pedirá que ingresemos el nombre de del archivo sino que lo debemos mandar como parámetro, en otras palabras el archivo generado no se debe ejecutar con doble clic sino por medio de la consola del windows. Creo que una imágen vale más que mil palabras:


El hecho que el programa tenga una forma especial de ejecutarse es que nosotros hicimos un proyecto en la Universidad en donde desde una aplicación en Java invocabamos a un ejecutable generado en C que se encargaba de realizar el procesamiento de la gramática y esa salida la mostrabamos en Java (que lógicamente presenta una mejor interfaz de usuario). Esto lo cuento a modo de anécdota por si tuvieran que hacer algo similar.

Y bueno, lógicamente también les pondré unos ejemplos de código. El primero es el que está escrito correctamente:

Codigo00.txt
Estructura est 
{
Entero num;
Entero nfgj;
Booleano ggnum;
} est1;

Definir Constante Entero numero := 145 ;

Funcion Entero miFuncion( Caracter Cadena; ) 

   Car:=Carro;
   Entero Num;

   Mientras ( c<d )

      Car:=Carro;
      Entero bandera;
      Booleano boole;
      boole:=1;

      Mientras ( a>=4 )

         Car:=Carro;
         Entero bandera;
         Booleano boole;
         boole:=1;

  Para ( a:=14; a<=25; a:= + 5 4 ;(
  
  
  Si ( a==4 ) Entonces
    Bool:=1;
     FinSi
  
  FinPara
  

      FinMientras

   FinMientras

   Si ( a==4 ) Entonces
  Bool:=1;
   FinSi

   Retorna Numero 

FinFuncion
Y el programa Shark Analyzer 3.0 lo analiza de la siguiente manera:


Y el siguiente código está mal escrito
Codigo01.txt
Definir Constante Entero numero := 145 ;
Definir Booleano nume := 1 ;
Funcion Entero ( Entero num; Real fre; Booleano boll;) 
   Mientras (  )
      Booleano ghjfg;
      bocfgh:=1;
      Mientras ( a>=4 )
         Car:=Carro;
         Entero bandera;
         Booleano boole;
         boole:=1; 
 Si ( a==4 ) 
   Bool:=1;
   Booleano boolean;
 SinoSi (a==5) Entonces
  Bool:=2;
 Sino Entonces
  Bool:=3;
    FinSi
      FinMientras
   FinMientras
   Retorna Carro
FinFuncion 
Shark Analyzer 3.0 nos muestra lo siguiente:


También puedes descargar el jar de Shark Analyzer y probar tus propios códigos (claro, en función de la gramática mostrarda en el script de bison).

También puedes cambiar la gramática y de esta manera el archivo ejecutable que te genera tu compilador de C lo puedes usar en lugar de kernel.exe, de este modo Shark Analyzer usará tus gramáticas y no las que trae por defecto en su kernel. exe. Eso si, recuerda que para que la consola de salida de Shark Analyzer marque de rojo las salidas donde se ha encontrado un error léxico o si ha ocurrido un error sintáctico, en el archivo de flex esta línea:
.                            {printf("ERROR LEXICO EN LINEA %d \n",yylineno);}
Siempre debe empezar con "ERROR", en otras palabras esa línea no debería ser modificada del archivo de Flex.
Cualquier duda o sugerencia no dudes en escribirla.