Frage

Ich erhalte die Warnung

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

Wenn Sie Google "Option, aber Standardregel angepasst werden kann", werden Sie a href = finden < "http://westes.github.io/flex/manual/Diagnostics.html" rel = "nofollow noreferrer" > das Kapitel Flex-Handbuch auf Diagnose und dieser Eintrag in einem alt Flex manpage im Abschnitt Diagnose:

  

Warnung, ‚es Option, aber Standard   Regel kann angepasst werden‘bedeutet, dass es   möglich (vielleicht nur in einem bestimmten   Startbedingung), dass die Standardregel   (Ein einzelnes Zeichen entsprechen) die   nur eine, die eine bestimmte übereinstimmen   Eingang. Da -s gegeben wurde,   Vermutlich ist dies nicht vorgesehen.

Meine Build-Datei hat keine -s Option. Ich schrieb

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

Wie behebe ich diese Warnung?

Hier ist eine kleine Version meiner lex-Datei. Diese Datei löst auch die Warnung

%{
#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"); }

%%
War es hilfreich?

Lösung

% Option nodefault entspricht es

Andere Tipps

Der „flex“ Befehl auf Ihrem System aliased haben könnte der Flex-Befehl mit einer Option es zu sein. Das in einer von mehreren Startskripts auftreten können.

Die Warnung Sie sagt, dass es einige Eingaben, die durch eine der Regeln in Ihrer Eingabedatei nicht aufeinander abgestimmt sind. Die Warnung ist um dorthin zu gelangen Sie sicher, dass Sie auf alle Fälle in Ihrem regulären Ausdrücken betrachtet haben.

Wenn Sie wirklich die Standardregel wollen verwendet werden, dann fügen Sie es bis zum Ende der Regeln in Ihrer Eingabedatei. Versuchen Sie, die Regeln

. ECHO;
\n ECHO;

Update: Die Eingabedatei enthält, die Sie bieten die Option% nodefault, die die gleiche wie die Angabe „es“ auf der Kommandozeile ist, so dass Rätsel gelöst sind. Auch dann, wenn die Datei nicht eine Regel für haben „“. Es gibt einige Zeichen nicht abgedeckt, ‚@‘ zum Beispiel.

Ich bin auch das verdächtig „-“ Symbols in der Zeichenklasse. Es sollte ein Bereichsoperator sein, aber es kann in der ersten Position als ein Zeichen arbeiten, wie Sie es haben. Ich weiß es nicht. Es könnte eine gute Idee zu verwenden „\ -“ sein. Statt

Sie können die letzte Regel ändern

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

zu der Warnung loszuwerden (und die daraus resultierenden Scanner zum Absturz zu verhindern).

Auch könnten Sie den Titel der Frage ändern zu flex statt Bison zu sein?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top