Me enseño a utilizar JavaCC en un proyecto de hobby, y tengo una gramática simple para escribir un analizador. Parte del analizador incluye lo siguiente:Explicación y solución para la advertencia de JavaCC "Elección de expresión regular: ¿FOO nunca puede coincidir como: BAR"?
TOKEN : { < DIGIT : (["0"-"9"]) > }
TOKEN : { < INTEGER : (<DIGIT>)+ > }
TOKEN : { < INTEGER_PAIR : (<INTEGER>){2} > }
TOKEN : { < FLOAT : (<NEGATE>)? <INTEGER> | (<NEGATE>)? <INTEGER> "." <INTEGER> | (<NEGATE>)? <INTEGER> "." | (<NEGATE>)? "." <INTEGER> > }
TOKEN : { < FLOAT_PAIR : (<FLOAT>){2} > }
TOKEN : { < NUMBER_PAIR : <FLOAT_PAIR> | <INTEGER_PAIR> > }
TOKEN : { < NEGATE : "-" > }
Al compilar con JavaCC me sale la salida:
Warning: Regular Expression choice : FLOAT_PAIR can never be matched as : NUMBER_PAIR
Warning: Regular Expression choice : INTEGER_PAIR can never be matched as : NUMBER_PAIR
Estoy seguro de que este es un concepto simple, pero no entiendo el aviso, siendo un principiante tanto en generación de analizador como en expresiones regulares.
¿Qué significa esta advertencia (en términos de "principiante como se puede obtener")?
No estoy seguro de eso, cambié Float para que no coincida con Integer - {)? "." | ()? "." | ()? "." >}, y todavía recibió la advertencia. Estoy sorprendido por eso, porque lo que dijiste parecía perfectamente lógico :) –
Grundlefleck
Hmm ... Sigo pensando que está relacionado con la ambigüedad, pero sinceramente, dado que no he probado JavaCC, no soy de ninguna utilidad para ti aquí ... Voy a diferir y espero que alguien que sabe que responderá. – Uri