는 좀 들소 문법이 있습니다Bison/YACC가 전체 문자열을 구문 분석 할 때까지 명령을 인식하지 못하게하려면 어떻게합니까?
input: /* empty */
| input command
;
command:
builtin
| external
;
builtin:
CD { printf("Changing to home directory...\n"); }
| CD WORD { printf("Changing to directory %s\n", $2); }
;
나는이 모든 입력을 읽을 때까지 들소는 command
로 (YYACCEPT?) 뭔가를 허용하지 얼마나 궁금하네요. 따라서 아래에있는 모든 규칙을 사용하여 재귀를 사용하거나 물건을 만드는 모든 방법을 사용할 수 있습니다. 유효한 명령이나 작동하지 않는 결과가 발생합니다.
위의 코드로 수행중인 간단한 테스트 중 하나는 "cd mydir mydir"입니다. Bison은 CD
과 WORD
을 파싱하고 "이봐,이게 명령이다. 그런 다음 찾은 다음 토큰은 규칙이없는 WORD
이며 그 다음에 오류를보고합니다.
전체 라인을 읽고 실현하고 싶습니다. CD WORD WORD
은 규칙이 아니며 오류를보고합니다. 나는 명백한 무엇인가 놓치고 있고, 어떤 도움이라도 크게 감사 할 것이다라고 생각한다 - 고마워한다!
또한 - input command NEWLINE
또는 유사한 것을 사용하려고 시도했지만 아직까지 CD WORD
을 명령으로 맨 뒤 푸시하고 여분의 WORD
을 별도로 구문 분석합니다.
'내장'은 줄 바꿈 ('입력'이 아니라)으로 끝내야합니다. 'CD WORD NEWLINE'에서와 같이 – leeeroy
'builtin'에'{'이 없으면'| CD WORD {printf ("% s로 변환하는 \ n", $ 2); } ' –
죄송합니다. 그건 내가 테스트하는 데 사용하는 코드가 아니었다 ... – chucknelson