2011-02-09 4 views
3

문자열을 처리 할 때 (주석과 같은 고유 한 상태가 있음) 다음 문자가 "아닌지"를 알아야합니다. 상태. 그래서 무슨 일이 난 그냥 내 문자열 상태에서 문자열을 끝내지 않는다 (나는 <STRING_STATE>. 사용하고 문자로 문자를 처리합니다.) 그래서 무슨 일이, 마지막 문자열 경우 표시 및 현재 isnt 상태를 종료합니다 그리고 마지막 편지를 푸십시오.bison/flex : 다음 문자 또는 토큰을 엿보기

이것은 이상한 효과가 있습니다. 줄에 줄에 오류가 발생하면 문자 (보통 ','또는 '))가 두 번 표시됩니다. 그리고 줄의 끝에있을 경우 부작용은 두 줄로 계산됩니다! (오류가 없더라도).

어떻게 해결할 수 있습니까? 전역 변수를 만들고 문자열 상태를 그대로두고 YY_USer를 해킹 할 때 표시하는 유일한 방법은 무엇입니까? 나는 그것을 피하고 싶다. 좀 더 깨끗하게하려면 다음 편지 나 토큰을 볼 수 있습니다. 가능합니까?

+1

안녕하세요, 저는 Adobe 프로그래밍 언어와 관련되어 있기 때문에 flex 태그를 제거했으며 대신에 더 적절한 gnu-flex 태그를 추가했습니다. –

+0

@Andrea Spadaccini : 알아두면 좋겠네요. gnu-flex 태그를 처음 보았습니다. –

+1

처음으로도 :) 나는 bison 태그 근처에서 adobe 아이콘을 보았 기 때문에 오류를 발견했습니다. 조금 의심 스럽습니다.) –

답변

9

flex에서는 / lookahead 연산자를 사용하여 향후 토큰에서 "미리보기"할 수 있습니다. 예를 들어

ab/cd 

과 같은 규칙은 'cd'가 뒤에 오는 경우에만 'ab'입력과 일치합니다. 즉, flex는 실제로이 규칙에 대해 'cd'와 일치하지만 규칙에 대한 작업을 호출하기 전에 입력 버퍼로 다시 푸시합니다. 따라서 yytext는 'ab'만 포함하고 'cd'는 다음 토큰에 대해 다시 읽으십시오.

관련 문제