0
나는 간단한을 구현하기 위해 노력하고 실행하면 경우 다음과 같은 형식의 Flex와 들소의 문 :들소 Yacc에 문은 항상
(표현) 왼쪽 표현이 0이 아닌 인 경우 (표현)
? 값이면 오른쪽 표현식이 실행됩니다.
들소 문법 규칙을 사용하면 누구나 내가 어떻게 할 수 있는지 보여줄 수 있습니까?
어떻게 :
나는 그러나 그것을 실행%union{
int d;
char *s;
}
%token <d>INTEGER
%token <s>VARIABLE
%nonassoc IF
%type <d>expr
%type <s> statement
%error-verbose
%left '+' '-'
%left '*' '/'
%left POWER
%right '!'
%%
program:
program statement {printf("Prefix notation of given expression: %s \n", stack[head]); /*Print final expression*/ }
|
;
statement:
expr '\n' { /* printf(" = %d \n", $1); */}
| VARIABLE '=' expr { sym[get_var_index($1)] = $3; printf(" = %d \n", $3); printf("Assigning var %s = %d index %d \n", $1, sym[get_var_index($1)],get_var_index($1)); }
| '(' expr ')' IF '('statement')' '\n' {printf("Bison found if statement: if(stmnt) then stmnt \n"); ($2)?$6: printf("False \n");}
|'\n'
;
expr:
INTEGER { $$ = $1; pushInt($1); printf("Got an Integer %d \n", $1);}
| VARIABLE { $$= sym[get_var_index($1)]; pushChars($1); printf("Printing %s = %d \n", $1, sym[get_var_index($1)]); }
| expr '+' expr { $$ = $1 + $3; popAndCalc("+"); }
| expr '-' expr { $$ = $1 - $3; popAndCalc("-"); }
| expr '*' expr { $$ = $1 * $3; popAndCalc("*"); }
| expr '/' expr { $$ = $1/$3; popAndCalc("/"); }
| expr POWER expr { $$ = pow($1, $3); popAndCalc("**"); }
| '(' expr ')' { $$ = $2;}
| '!' expr { $$ = !$2; popAndCalc("!"); }
는, 그것이 거짓도 블록을 실행 : 여기
내가 지금까지 무엇을 보여줍니다 내 들소 코드의 PIEC입니다 이 문제가 해결됩니까? 나는 뭔가를 놓치고 있다고 생각합니다. 도와주세요.