yacc 에 대한 질문입니다. 디코딩이 안되요...ㅡㅡ;
현재 스트림 디코딩을 위해 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로 빠지네요.
lex 정의가 이상하네요
뭔가 오타가 있으신듯한데, 원래 어떤 내용인지 몰라서 답변드리기가 힘드네요
http://jungjun.net
ALPHA 의 리스트가 필요합니다.
production 부분에서 보면
ALPHA는 단어이기 때문에 단어들의 집합에 대한 production 규칙이 추가되어야 합니다.
아니면 ALPHA의 lex 단을 단어([a-z ]+)들의 집합으로 변경하는 것도 고려해 볼수 있습니다.
댓글 달기