문제

파서 생성기에는 Flex와 Bison을 사용하고 있지만 스캐너의 시작 상태에 문제가 있습니다.

의견을 다루기 위해 독점 규칙을 사용하고 있지만이 문법은 인용 된 토큰과 일치하지 않는 것 같습니다.

%x COMMENT

//                    { BEGIN(COMMENT); }
<COMMENT>[^\n]        ;
<COMMENT>\n           { BEGIN(INITIAL); }

"=="                  { return EQUALEQUAL; }

.                     ;

이 간단한 예에서 선은 다음과 같습니다.

// a == b

이 규칙을 포함하지 않는 한 전적으로 의견과 일치하지 않습니다.

<COMMENT>"=="             ;

이 모든 토큰을 독점적 인 규칙에 추가하지 않고도 어떻게 되나요?

도움이 되었습니까?

해결책

Lex/Flex 또는 잘 문서화 된 C 스타일의 의견에 맞는 :

문서에서, 인터넷 주변의 다양한 변형뿐만 아니라.

Flex 문서에서 찾은 것의 변형은 다음과 같습니다.

   <INITIAL>{
     "//"              BEGIN(IN_COMMENT);
     }
     <IN_COMMENT>{
     \n      BEGIN(INITIAL);
     [^\n]+    // eat comment
     "/"       // eat the lone /
     }

다른 팁

^n] 규칙 이후 "+"를 추가하십시오. 나는 독점 상태가 여전히 독점 상태에서도 '=='를 집어 올리는 이유를 모르겠지만 분명히 그렇습니다. Flex는 일반적으로 가장 많은 텍스트와 일치하는 규칙과 일치하며 "+"를 추가하면 최소한 두 규칙을 길이로 연결합니다. 주석 규칙을 먼저두면 타이의 경우 사용됩니다.

단서는 다음과 같습니다.

문제는이 'Eat Eat Comment'규칙이 하나 이상의 캐릭터와 토큰과 일치하지 않는 것 같습니다.

따라서 a *를 추가하여 0 개 이상의 비 뉴 라인을 일치 시키십시오. 그렇지 않으면 빈 주석이 일치하지 않습니다.

%x COMMENT

//                    { BEGIN(COMMENT); }
<COMMENT>[^\n]*        ;
<COMMENT>\n           { BEGIN(INITIAL); }

"=="                  { return EQUALEQUAL; }

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