es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Regla no reconocida de Flex/Lex para paréntesis.

“`%{

%}

%%
'*' {return 0;}
'(' {return 1;}
')' {return 2;}
%%

int yywrap(){}

<pre><code><br />Un ejemplo de código como el anterior. Muestra el mensaje de error:

</code></pre>

zort.l:7: regla no reconocida
zort.l:8: regla no reconocida
zort.l:8: regla no reconocida
zort.l:8: regla no reconocida
“`

Solo muestra el error para los caracteres de paréntesis. ¿Cuál es la razón? ¿Son las comillas excepciones? ¿Cómo se puede resolver?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón del mensaje de error es que los caracteres paréntesis son caracteres especiales en flex-lexer, y necesitan ser escapados para ser reconocidos como caracteres regulares. Por lo tanto, la forma correcta de escribir las reglas para los paréntesis en el código de ejemplo sería:

    %{
    
    %}
    
    %%
    
    '*'     {return 0;}
    '\\('   {return 1;}    /* Paréntesis de apertura escapado */
    '\\)'   {return 2;}    /* Paréntesis de cierre escapado */
    
    %%
    
    int yywrap(){}
    

    Al escapar los caracteres de paréntesis con una barra invertida, flex-lexer los reconoce como caracteres regulares y el mensaje de error desaparece.

    Es importante tener en cuenta que hay otros caracteres que también se consideran caracteres especiales en flex-lexer, como el punto (.), el signo más (+), el asterisco (*), entre otros. Siempre que se pretenda utilizar estos caracteres especiales como caracteres regulares en una regla, también es necesario escaparlos con una barra invertida.

Comments are closed.