문제

컴파일러 구현 작업 중이며 파일 종료에 도달했는지 확인하고 싶습니다.

LEX 파일에서 yywrap () 함수를 사용하여 수행 할 수 있다는 것을 알고 있지만, EOF가 HEX 값 0x1A와 같이 명시 적으로 정의 된 경우 요구 사항이 필요합니다.

예시:

main () {printf ( "점검 마커 n"); '0x1a'<- 실제 마커.

위의 사항은 구문 오류가 아니라 불균형 괄호로 오류로보고되거나 잘못 정의되기를 원합니다.

위의 일을 할 수 있습니까? 저의 요구 사항은 파서에 EOF 토큰을 두는 것입니다. 불행히도, 나는 지금까지 그렇게 할 수 없었습니다.-(((, 나머지 작업은 쉽게 수행 될 것입니다. 와 같은:

print    :    print_stmt '(' stmt_valid ')' colon '\n' 
{
    OK do the rest
}
         |    print_stmt '(' stmt_valid ')' colon end_indicator
{
    print error message and close application.
}
도움이 되었습니까?

해결책

Lexer를 EOF에 대한 토큰으로 반환하십시오.

두 가지 경우에 대해 토큰을 반환하는 것이 좋습니다.

  1. getc() 반환 -1 (일반적인 EOF 표시). 이 경우 토큰 텍스트를 비워 두십시오

  2. getc() 반환 '\x1a'. 이 경우이 문자를 토큰 텍스트에 넣으십시오.

이를 통해 문법 이이 두 경우를 구별 할 수 있습니다.

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