토큰 '오류'의 의미는 무엇입니까? 없이 오류를 감지하는 방법;Yacc - '오류'는 무엇을 의미합니까?
답변
의사 터미널이 일치하면 bison 파서는 "처리 할 수없는"토큰을 버리는 것을 제외하고 정상적인 방식으로 구문 분석을 계속합니다.
error
토큰 바로 뒤에있는 토큰을 발견하면 해당 토큰을 이동할 수 있습니다. 즉, 토큰 삭제를 중지합니다.
그러나 파서가 토큰을 처리 할 수있는 유일한 방법은 아닙니다. 또한 축소를 수행하여 처리 할 수도 있습니다.
축소 처리 작업이 미리보기 토큰을 실제로 받아들이지 않기 때문에 "처리됨"이라는 단어가 느슨하게 해석됩니다. 그럼에도 불구하고 오류 생성을 줄이는 것으로 충분합니다.
이러한 경우에는 이 아니라yyerrok
으로 전화해야합니다. 오류 처리가 yyerrok
으로 취소되고 미리보기 토큰을 이동할 수 없으면 오류 처리기가 다시 실행되고 무한 루프가 될 수 있습니다. 예를 들어
,
commands: %empty | commands command
command : exp ';' { printf("Value is %d\n", $1); }
| error ';' { printf("Bad expression\n"); yyerrok; }
| error { printf("Missing semicolon\n"); }
제 command
생산 인쇄 될 올바른 표현의 결과를 야기한다. 두 번째 제품은 여전히 세미콜론이있는 구문 오류를 처리합니다. ;
이 이미 이동되었으므로 오류 처리를 취소 할 수 있으므로 오류 처리를 다시 시작하는 것이 좋습니다.
세 번째 제품에서는 세미콜론이 누락되었습니다. lookahead 토큰이 과 같이 불법 토큰 일 수 있기 때문에 여기서 yyerrok
이라고 부를 수 없습니다!. yyerrok
에 전화하면 오류 상태가 지워지고 오류 처리가 lookahead 토큰과 동일한 느낌표로 즉시 다시 입력되어 무한 루프가 발생합니다. 그러나 없이 yyerrok
인 경우 파서는 여전히 오류 처리 모드에 있으며 문제가되는 토큰은 삭제됩니다.
참고 : 위의 내용은 error
제품이 error
토큰 다음에 아무런 영향을 미치지 않는 문제에 대한 답변을 제공하기위한 것입니다. "질문 : 예를 들어"어떻게해야합니까? X "과 같은 질문에 대답하지 않으려 고합니다. (다양한 값인 X). 제공된 예는 약간 인공적입니다. 원래는 표현식 종결 자로 개행 문자를 사용 했으므로 두 번째 오류 처리 프로덕션을 포함 할 필요가 없었습니다. EOF를 제외하고 종료하는 개행 문자를 제외하는 것이 실제로 불가능하기 때문입니다. 혼란의
그러나 글로벌 장식 처리 할 수 \t ExtDefList을 \t \t \t \t \t {} \t \t \t \t; ExtDefList \t \t : \t \t \t {} \t \t \t \t \t ExtDef ExtDefList | \t/* 빈 */\t \t \t \t \t {} \t \t \t \t; ExtDef \t \t \t : \t 지정자 ExtDecList 세미 \t {} \t \t \t \t ... \t \t \t \t | \t 오류 SEMI \t \t \t \t \t {printf ("bad expression % s \ n", yytext); yyerrok;} \t \t \t \t | \t 오류 \t \t \t \t \t \t {의 printf ("반 \ n을 누락되었습니다");} \t \t \t \t,' – Rachel
@rachel을 : 그 코멘트는 일반적으로 당신이 새로운 질문을해야한다는 의미 읽을 본질적으로 불가능하다 더 자세한 사항. (목표가 정확히 무엇인지, 정확히 무엇을 시도했는지는 요구 사항을 충족시키지 못했습니다.)하지만 동기화 토큰이없는 경우 누락 된 토큰을 인식하는 것이 항상 쉬운 것은 아닙니다. – rici
하나의 일반적인 Source (소스) - error
토큰이 오류 복구입니다, 감지 에러 없습니다. 구문 오류는 파서가 자동으로 감지하여보고합니다. 액션의 다른 오류를 감지하고 YYERROR
매크로를 사용하여 bison에게 알릴 수 있습니다.
개념적으로, error
토큰은 유효하지 않은 입력 스트림을 유효한 것으로 변환하기 위해 0 개 이상의 입력 토큰 시퀀스를 대체합니다.오류가 발생하면 bison 생성 구문 분석기는 오류 복구 모드로 진행하여 error
의사 토큰을 이동할 수있는 위치에 도달 할 때까지 토큰 및 상태를 삭제합니다. 그런 다음 오류 토큰을 이동시키고 거기에서 계속 시도합니다.
- 1. 이 오류는 무엇을 의미합니까?
- 2. 이 오류는 무엇을 의미합니까?
- 3. java에서이 오류는 무엇을 의미합니까?
- 4. max_user_connections 오류는 무엇을 의미합니까?
- 5. MySQL에서이 오류는 무엇을 의미합니까?
- 6. 내 오류는 무엇을 의미합니까?
- 7. 오류는 무엇을 의미합니까?
- 8. 이 오류는 무엇을 의미합니까?
- 9. xcode에서이 오류는 무엇을 의미합니까?
- 10. 이 오류는 무엇을 의미합니까?
- 11. 이 오류는 무엇을 의미합니까?
- 12. Elifecycle 오류는 무엇을 의미합니까?
- 13. c에서이 오류는 무엇을 의미합니까?
- 14. 이 오류는 무엇을 의미합니까?
- 15. 이 오류는 무엇을 의미합니까?
- 16. 이 오류는 무엇을 의미합니까?
- 17. Valgrind에서 VgTs_WaitSys의 오류는 무엇을 의미합니까?
- 18. 이 VB6 오류는 무엇을 의미합니까?
- 19. 메서드 호출에서이 오류는 무엇을 의미합니까?
- 20. 이 실행 오류는 무엇을 의미합니까?
- 21. sikuli에서 org.sikuli.api.ScreenRegion 오류는 무엇을 의미합니까?
- 22. "정렬 트랩"오류는 무엇을 의미합니까?
- 23. 이 일식 오류는 무엇을 의미합니까?
- 24. 이 트리거 오류는 무엇을 의미합니까
- 25. 문제가 발생했습니다.이 오류는 무엇을 의미합니까?
- 26. 이 PHP 오류는 무엇을 의미합니까?
- 27. Pyglet을 사용하려고합니다.이 오류는 무엇을 의미합니까?
- 28. 이 LogCat 오류는 무엇을 의미합니까?
- 29. 커널 패닉 오류는 무엇을 의미합니까?
- 30. 이 Ghostscript 오류는 무엇을 의미합니까?
'error'는 다음과 같은 의미입니다. 파서 오류. 자신이 직접 처리 할 수 있도록 오류를 포착하여 복구 또는 사용자 정의보고를 수행 할 수 있습니다. '프로그램 \t \t \t : –