Estoy tratando de analizar un idioma heredado (que es similar a 'C') usando FLEX y BISON. Todo está funcionando muy bien, excepto por las cadenas coincidentes.¿Cómo escribo una coincidencia no codiciosa en LEX/FLEX?
Este lenguaje legado bastante extraño no soporta citando caracteres en los literales de cadena, por lo que los siguientes son todos los literales de cadena válidos:
"hello"
""
"\"
estoy usando la siguiente regla para que coincida con los literales de cadena:
\".*\" { yylval.strval = _strdup(yytext); return LIT_STRING; }
Desafortunadamente este es un partido codicioso, lo que coincide con el código como el siguiente:
"hello", "world"
Como una cadena única (hello", "world
).
El cuantificador no codicioso habitual .*?
no parece funcionar en FLEX. ¿Algunas ideas?
esto podría usted: http://www.lysator.liu.se/c/ANSI-C-grammar-l.html –