문법 구현에서 파일 디스크립터의 끝
-
20-08-2019 - |
문제
컴파일러 구현 작업 중이며 파일 종료에 도달했는지 확인하고 싶습니다.
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에 대한 토큰으로 반환하십시오.
두 가지 경우에 대해 토큰을 반환하는 것이 좋습니다.
getc()
반환-1
(일반적인 EOF 표시). 이 경우 토큰 텍스트를 비워 두십시오getc()
반환'\x1a'
. 이 경우이 문자를 토큰 텍스트에 넣으십시오.
이를 통해 문법 이이 두 경우를 구별 할 수 있습니다.
제휴하지 않습니다 StackOverflow