2013-05-21 4 views
-1

내 파서 파일 (Flex/Bison 파일을 컴파일 한 후 바이너리 파일)을 실행할 때 다음 오류가 발생합니다. 여기 error: syntax error, unexpected TKN_PRIMARY, expecting end of file구문 오류, 예기치 않은 토큰, 파일 끝 부분 예상

이 규칙은 플렉스 코드에 정의되어

<PRIMARY_MME_STATE>{number} { 
lexVal = YYText(); 
std::cout<<"PRIMARY MME --> "<<lexVal<<std::endl; 
yylval->strVal = new std::string(lexVal); 
return token::TKN_PRIMARYMME; 
} 

을 그리고 나의 이해는 그 TKN_PRIMARY의 값은 (END %의 토큰 END 0 "파일의 끝"에 대해 정의 된 값 인)는 0이기 때문에 TKN_PRIMARY를 반환하는 대신 반환되는 토큰 END가 필요합니다. 제 이해가 정확하다면 의견을주십시오. 또한이 문제를 해결하는 방법도 있습니다.

+0

나는 PRIMARY MME -> 0이 인쇄되는 것을보고 아무 것도 보지 않으면 – user2313227

+0

.y 및 .lex 파일을 게시해야합니다. 그러면 문제가 분명해질 수 있습니다. – pbhd

답변

1

TKN_PRIMARYEND이 같은 값일 경우 (또는 일반적으로 두 개의 서로 다른 토큰이 동일한 값을 갖는 경우), bison 파서는 예측할 수없는 방식으로 작동합니다.

bison manual을 인용 :

그것은이다 일반적으로 가장하지만, 들소가 모든 토큰 유형에 대한 숫자 코드를 선택할 수 있도록합니다. Bison은 이 서로 충돌하거나 정상적인 문자로 충돌하지 않는 코드를 자동으로 선택합니다.

저는 이것이 분명히 문제를 다루는 가장 좋은 방법이라고 생각합니다.

+0

문제는 값을 정의하지 못하는 것입니다. TKN_PRIMARYMME, 로그 파일 (파서가 작성된)을 스캔 한 후 토큰 자체가 값 = 0을 얻습니다. 이제 어떻게해야합니까? – user2313227

+0

@ user2313227 :이 경우에는 전혀 모른다. 당신은 어떤 세부 사항도 게시하지 않았고, 나는 영매가 아닙니다. 그래서'TKN_PRIMARY'가'0' (당신이한다면)이거나 문법이 어떻게 생겼는지 왜 당신이 생각하는지 모르겠습니다. – rici

관련 문제