Bison aviso construção: “opção -s dado, mas regra padrão pode ser igualada”

StackOverflow https://stackoverflow.com/questions/1622493

  •  06-07-2019
  •  | 
  •  

Pergunta

Eu recebo o aviso

warning, -s option given but default rule can be matched

Se você google "opção dada, mas regra padrão pode ser igualada", você encontrará capítulo do manual do Flex em Diagnostics e esta entrada em uma velho Flex manpage na seção Diagnóstico:

aviso, 'opção -s dado, mas padrão regra pode ser combinado', que é possível (talvez apenas em um determinado condição de início) que a regra padrão (Corresponde a qualquer caractere único) é o apenas um que irá corresponder a um determinado entrada. Desde -s foi dada, Presumivelmente, isso não se destina.

Meu arquivo de construção não tem uma opção -s. Eu escrevi

bison -y -d calc1.y
flex calc1.l
gcc code...

Como faço para corrigir este aviso?

Aqui está uma versão pequena do meu arquivo lex. Este arquivo também dispara o aviso

%{
#include "y.tab.h"
%}
%option noyywrap nodefault yylineno

%%

[0-9]+      {
                return INTEGER;
            }

[-+()=/*{},;\n] { return *yytext; }

[ \t]       /* skip whitespace */

[a-zA-Z0-9_]* { printf("lex Unknown character = '%s'", yytext); yyerror("lex Unknown character"); }

%%
Foi útil?

Solução

opção% NODEFAULT é equivalente a -s

Outras dicas

O comando "flexível" em seu sistema poderia ter sido alias para ser o comando flexível com opção -s. Isso pode ocorrer em qualquer um dos vários scripts de inicialização.

O aviso está lhe dizendo que há algumas entradas que não sejam compensadas por qualquer uma das regras no seu arquivo de entrada. O aviso está lá para levá-lo para ter certeza de ter considerado todos os casos em suas expressões regulares.

Se você quiser realmente a regra padrão a ser usado, em seguida, adicioná-lo ao fim das regras em seu arquivo de entrada. Tente adicionar as regras

. ECHO;
\n ECHO;

Update: O arquivo de entrada que você fornecer inclui a% NODEFAULT opção, que é o mesmo que especificar "-s" na linha de comando, de modo que mistério está resolvido. Além disso, o arquivo não tem uma regra para "". Há alguns caracteres não cobertos, '@', por exemplo.

Eu também sou suspeito do símbolo - na classe de caracteres "". É suposto ser um operador de intervalo, mas pode funcionar como um personagem na primeira posição como você tê-lo. Eu não sei. Pode ser uma boa idéia usar "\ -". Invés

Você pode mudar a última regra para

. { printf("lex Unknown character = '%s'", yytext); yyerror("lex Unknown character"); }

para se livrar do aviso (e para evitar o scanner resultante de bater).

Além disso, você poderia alterar o título da pergunta ser sobre Flex vez de bisonte?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top