yacc 에 대한 질문입니다. 디코딩이 안되요...ㅡㅡ;

jykimi의 이미지

현재 스트림 디코딩을 위해 lex와 yacc을 사용하는데..

아래 스트링에 대하여 디코딩이 안되네요..무엇이 문제인지 도와주세요...

Error = 510{"[213] MRMB VOP Resource Unavailable"} -> 이 스트링에 대하여
--------------------------------------------------------
yacc은 아래와 같이 디코딩합니다.

ErrorToken EQUAL ErrorCode LBRKT quotedString RBRKT

ErrorCode
INTEGER

quotedString:
QSTRING

QSTRING:
'"' ALPHA '"'
|'"' '[' INTEGER ']' ALPHA '"'
|error {PRINT_INFO("error in QSTRING\n");}
;
--------------------------------------------------------
lex에서는 아래와 같이 정의하였습니다.
[ \t\n\r] ; /* skip whitespace */
Error|ER {return ErrorToken ;}
[a-z]+ {
yylval->sv=yytext;
return ALPHA;
}
[\|\+\#\.\/\-\_\[\<\(\)\*\$\\] {return *yytext;};
\] {BEGIN 0;return *yytext;}
[0-9]+ { yylval->sv=yytext;
return INTEGER;
}
--------------------------------------------------------

위와 같이 했을 때 print로 디버깅을 하니, QSTRING에서 자꾸 error로 빠지네요.

dude7853의 이미지

뭔가 오타가 있으신듯한데, 원래 어떤 내용인지 몰라서 답변드리기가 힘드네요

jykimi wrote:

[\|\+\#\.\/\-\_\[\sv=yytext;
return INTEGER;
}
lovewar의 이미지

production 부분에서 보면

ALPHA는 단어이기 때문에 단어들의 집합에 대한 production 규칙이 추가되어야 합니다.

아니면 ALPHA의 lex 단을 단어([a-z ]+)들의 집합으로 변경하는 것도 고려해 볼수 있습니다.