들소 빌드 경고 :“-S 옵션이 주어 지지만 기본 규칙이 일치 할 수 있습니다”

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

  •  06-07-2019
  •  | 
  •  

문제

나는 경고를 받는다

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

Google "옵션이 제공되지만 기본 규칙이 일치 할 수 있다면" 진단에 관한 Flex 매뉴얼의 장 그리고이 항목에서 오래된 플렉스 맨 페이지 진단 섹션에서 :

경고, '-s 옵션이 주어진 옵션이지만 기본 규칙이 일치 할 수 있다는 것은 (아마도 특정 시작 조건에서만) 기본 규칙 (단일 문자 일치)이 특정 입력과 일치하는 유일한 것임을 의미합니다. 부터 -s 아마도 이것은 의도되지 않았을 것입니다.

내 빌드 파일에는 a가 없습니다 -s 옵션. 나는 썼다

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

이 경고를 어떻게 해결합니까?

다음은 내 Lex 파일의 작은 버전입니다. 이 파일은 또한 경고를 트리거합니다

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

%%
도움이 되었습니까?

해결책

%옵션 nodefault는 -s와 같습니다

다른 팁

시스템의 "Flex"명령은 -S 옵션이있는 Flex 명령으로 별명을 받았을 수 있습니다. 이는 여러 스타트 업 스크립트에서 발생할 수 있습니다.

경고는 입력 파일의 규칙과 일치하지 않는 일부 입력이 있음을 알려줍니다. 경고는 정규 표현식의 모든 사례를 고려해야하는지 확인해야합니다.

기본 규칙을 진정으로 사용하려면 입력 파일의 규칙 끝에 추가하십시오. 규칙을 추가하십시오

. ECHO;
\n ECHO;

업데이트 : 제공하는 입력 파일에는 명령 줄에 "-s"를 지정하는 것과 동일한 %옵션 NodeFault가 포함되어 있으므로 미스터리가 해결됩니다. 또한 파일에는 "에 대한 규칙이 없습니다.". 예를 들어 '@'를 다루지 않은 문자가 있습니다.

나는 또한 캐릭터 클래스의 "-"기호를 의심합니다. 범위 운영자가되어야하지만 첫 번째 위치에서 캐릭터로 작동 할 수 있습니다. 모르겠어요. 대신 "-"를 사용하는 것이 좋습니다.

마지막 규칙을 변경할 수 있습니다

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

경고를 제거하고 결과 스캐너가 충돌하지 않도록합니다).

또한 Bison 대신 Flex에 관한 질문 제목을 변경할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top