YACC 및 LEX을 사용하여 문법이 a^nb^n
과 일치하면 문자열을 확인하고 싶습니다.YACC 생성 파서가 동일한 입력에 대해 서로 다른 출력을 제공합니다.
렉스 파일 : 여기에 같은 순서로 내 LEX와 YACC 파일은
%{
#include <stdio.h>
#include <y.tab.h>
%}
%%
a {return A;}
b {return B;}
. {return yytext[0];}
\n {return NL;}
%%
int yywrap(void) {
return 1;
}
YACC 파일 :
입력 문자열 :
%{
#include <stdio.h>
yyerror()
{
printf("Rejected\n");
}
%}
%token A B NL
%start T
%%
T : S NL {printf("accepted\n");}
;
S : A S B
| A B
;
%%
main()
{
yyparse();
}
문제는 출력은 AABB
출력 : 허용
,입력 문자열 : AABB
출력 : 두 번째 입력시 동일한 입력 또는 응답을 허용 할 수 있다고 가정하는 모든 입력이 거부
를 거부 하였다. YACC에는 문자열을 파싱 할 때 사용하는 스택이 있다는 것을 알게되었습니다. 그러나 그것에 관한 어떤 문서도 찾을 수 없었습니다. 도와주세요.
"#include ..."라고 쓰여진 블록에 주 기능을 넣으십시오. –
아니요, 작동하지 않았습니다. 아직도 그것은 두 번째 시간을 거절합니다. – Midhun
그런 다음. 미안 해요 @ 미드 난, 다양한 출력물의 원인이 무엇인지 모르겠습니다. –