0
의 값이 I bison
사양에 다음과 같은 제품이 있습니다은/들소는 0
op : '+' { printf("%d %d %c\n", $1, '+', '+'); }
때 나는 입력 나는 다음과 같은 출력을 얻을 +
:
0 43 +
을 누군가 $1
의 값이 0 인 이유를 설명 할 수 있습니까? 43이 아니어야합니까? 내가 뭘 놓치고 있니?
편집
아무 플렉스 파일이 없지만, 나는 bison
문법 제공 할 수
%{
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int yylex();
int yyerror();
%}
%token NUMBER
%%
lexp : NUMBER
| '(' op lexp-seq ')'
;
op : '+' { printf("%d %d %c\n", $1, '+', '+'); }
| '-' { printf("%d %d %c\n", $1, '-', '-'); }
| '*' { printf("%d %d %c\n", $1, '*', '*'); }
;
lexp-seq : lexp-seq lexp
| lexp
;
%%
int main(int argc, char** argv) {
if (2 == argc && (0 == strcmp("-g", argv[1])))
yydebug = 1;
return yyparse();
}
int yylex() {
int c;
/* eliminate blanks*/
while((c = getchar()) == ' ');
if (isdigit(c)) {
ungetc(c, stdin);
scanf("%d", &yylval);
return (NUMBER);
}
/* makes the parse stop */
if (c == '\n') return 0;
return (c);
}
int yyerror(char * s) {
fprintf(stderr, "%s\n", s);
return 0;
} /* allows for printing of an error message */
flex 파일을 표시해야합니다.이 코드는 값을 bison으로 반환합니다. –
@ BrianTompsett- 汤 莱恩 방금 편집했습니다. 어쩌면 도움이 될지도 모른다. – flashburn