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?
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:
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.