void main() { float RES = (XMAX - XMIN)/N; //resolution int i,j,p; //************************* PGPLOT CODE *************************** cpgbeg(0,"?",1,1); cpgpage(); cpgsci(1); // axis color cpgpap(0,1); //axis limits cpgswin(XMIN,XMAX,YMIN,YMAX); cpgbox("BCN",1, 0, "BCN", 1, 0); // draw the axes cpgsci(1); //data color cpgsch(0.00000000000001); //data point size //******************* GRID ALGORITHM AND PLOTTING ******************* struct cnum z; //complex variables z and c introduced struct cnum c; for(i=0;i<N;i++) //look at every point on grid { for(j=0;j<N;j++) { z.cx = XMIN + i*RES; // z = current point z.cy = YMIN + j*RES; CPRINT(z); c.cx = z.cx; // keep z, feed c=z in to iteration c.cy = z.cy; for(p=0;p<MNI;p++) //apply MNI iterations to c { c = FJULIA(c); if ( c.cx*c.cx + c.cy*c.cy > R) // if iteration "blows up"... { z.cx = 0; z.cy = 0; c.cx = 0; c.cy = 0; } } if (c.cx*c.cx + c.cy*c.cy < R) //if iteration hasn't blown up... { float X[1], Y[1]; X[0] = z.cx; Y[0] = z.cy; cpgpt(1,X,Y,17); // plot point z } } } printf("\n\n"); cpgend(); }
void main() { float RES = (XMAX - XMIN)/N; //resolution int i,j,p; //************************* PGPLOT CODE *************************** cpgbeg(0,"?",1,1); cpgpage(); cpgsci(1); // axis color cpgpap(0,1); //axis limits cpgswin(XMIN,XMAX,YMIN,YMAX); cpgbox("BCN",1, 0, "BCN", 1, 0); // draw the axes cpgsci(1); //data color cpgsch(0.00000000000001); //data point size //******************* GRID ALGORITHM AND PLOTTING ******************** struct cnum z; // z = (0,0) = initial number struct cnum c; // c is a complex variable z.cx = 0; z.cy = 0; for(i=0;i<N;i++) //look at every point on grid { for(j=0;j<N;j++) { c.cx = XMIN + i*RES; //assign c = current point c.cy = YMIN + j*RES; CPRINT(c); for(p=0;p<MNI;p++) //apply MNI iterations to z { //using c = current point z = FMANDEL(z,c); if ( z.cx*z.cx + z.cy*z.cy > R) // if iteration "blows up"... { z.cx = 0; z.cy = 0; //stay at z=c=0 c.cx = 0; c.cy = 0; } } //end of interation. z = final number if (z.cx*z.cx + z.cy*z.cy < R) //if iteration hasn't blown up... { float X[1], Y[1]; X[0] = c.cx; Y[0] = c.cy; cpgpt(1,X,Y,17); // plot point c } } } printf("\n\n"); cpgend(); }
char* eval(struct ast* a) { char *val, *rval, *lval, tempo, temp_variable[10]; //char tmpname[4], tmpstr[4]; switch (a->nodetype) { case 'K': return ((struct numval *) a)->number; // Leaf node case 'F': return ((struct floatval *) a)->number; // Leaf node reading_ident_list = 1; break; case 'Z': return ((struct stringval *) a)->number; // Leaf node case 'R': identqueuehead = NULL; reading_ident_list = 1; reading_integer_list = 0; reading_float_list = 0; reading_string_list = 0; break; case '$': case 'N': identqueuehead = NULL; reading_integer_list = 1; reading_ident_list = 0; //integer_ident_list = 0; reading_float_list = 0; reading_string_list = 0; break; case ';': case 'D': identqueuehead = NULL; reading_float_list = 1; reading_ident_list = 0; reading_integer_list = 0; //float_ident_list = 0; reading_string_list = 0; break; case '#': case 'L': identqueuehead = NULL; reading_string_list = 1; reading_ident_list = 0; reading_integer_list = 0; reading_float_list = 0; //string_ident_list = 0; break; case 'S': if (reading_integer_list == 1) { add_ident_to_queue(((struct identval *) a)->ident); if(in_main==0) { procedure_add_to_table(((struct identval *) a)->ident); } } if (reading_float_list == 1) { add_ident_to_queue(((struct identval *) a)->ident); if(in_main==0) { procedure_add_to_table(((struct identval *) a)->ident); } } if (reading_string_list == 1) { add_ident_to_queue(((struct identval *) a)->ident); if(in_main==0) { procedure_add_to_table(((struct identval *) a)->ident); } } if (reading_ident_list == 1) { is_valid_rvalue( ((struct identval *) a)->ident ); if(in_main == 0) procedure_is_valid_rvalue(((struct identval *) a)->ident ); add_ident_to_queue(((struct identval *) a)->ident); } //remove this //add_ident_to_queue(((struct identval *) a)->ident); return((struct identval *) a)->ident; // Leaf node case 'W': break; case 'J': count++; break; case 'A': if (para_write==1) { para_write=0; fprintf(fp_out,") \n"); } { int a =0 ; if(name!=0){ for(a=name-1;a>-1;a--) { fprintf(fp_out,"Line %d: %s = param\n",lineno++, param_name[a]); } }} name = 0; break; case '+': case '-': case '*': case '/': case '%': case '&': case '|': case '!': case 'B': case 'C': case 'G': case 'H': case '<': case '>': break; case '=':break; case 'I': break; case 'T': break; case 'Q': parent = 1; break; case 'O': case 'Y': break; case 'P': printf("This is a primary symbol\n"); break; case 'E': break; case '1': in_method=1; in_main = 0; procedure[proccount] = (struct sym_table*) malloc(sizeof(struct sym_table)); procedure[proccount]->size=0; procedure[proccount]->max_size=32; procedure[proccount]->entries = (struct sym_table_entry*) malloc(procedure[proccount]->max_size*sizeof(struct sym_table_entry)); proccount++; break; case '2': in_main = 0; procedure[proccount] = (struct sym_table*) malloc(sizeof(struct sym_table)); procedure[proccount]->size=0; procedure[proccount]->max_size=32; procedure[proccount]->entries = (struct sym_table_entry*) malloc(procedure[proccount]->max_size*sizeof(struct sym_table_entry)); proccount++; break; case '3': in_main = 0; procedure[proccount] = (struct sym_table*) malloc(sizeof(struct sym_table)); procedure[proccount]->size=0; procedure[proccount]->max_size=32; procedure[proccount]->entries = (struct sym_table_entry*) malloc(procedure[proccount]->max_size*sizeof(struct sym_table_entry)); proccount++; break; case '4': in_main = 0; procedure[proccount] = (struct sym_table*) malloc(sizeof(struct sym_table)); procedure[proccount]->size=0; procedure[proccount]->max_size=32; procedure[proccount]->entries = (struct sym_table_entry*) malloc(procedure[proccount]->max_size*sizeof(struct sym_table_entry)); proccount++; break; case '5': break; case '6': break; case '7': break; case '8': fprintf(fp_out,"Line %d: return \n", lineno++); break; case 'V': proc_used=1; break; case '@': break; case '^': break; case '~': para_write=1; break; case '[': para_write=1; break; case '(': para_write=1; break; case ')': para_write=1; break; case '_': break; case ']': break; case '9': break; case ':': procp_used = 1; break; case '.': break; case ',': break; case '?': funcp_write = 1; break; case 'U': funcp_write = 0; count_para = 0; break; default: printf("Error: it's here at top Unknown node type: %c\n", a->nodetype); return; } if (a->l) { lval = eval(a->l); switch (a->nodetype) { case 'R': reading_ident_list = 0; reading_integer_list = 0; reading_float_list = 0; reading_string_list = 0; break; case 'W': if (a->l->nodetype == '+' || a->l->nodetype == '-' || a->l->nodetype == '*' || a->l->nodetype == '/') { CPRINT(lineno, tempvars[tempvarindex], lval); fprintf(fp_out,"Line %d: %s = %s\n", lineno++, tempvars[tempvarindex], lval); sprintf(lval,"%s", tempvars[tempvarindex++]); } break; case '=': is_valid_rvalue(lval); if(in_main==0) procedure_is_valid_rvalue(lval); strcat(lval, " = "); break; case '+': case '-': case '*': case '/': case '%': case '&': case '|': case '!': case 'B': case 'C': case 'G': case 'H': case '<': case '>': break; case 'A': case 'I': case 'P': break; case 'J': fprintf(fp_out,"Line %d: Label %d:\n",lineno++, label++); gencode(lval); fprintf(fp_out,"Line %d: condition = %s\n",lineno++, tempvars[tempvarindex-1]); fprintf(fp_out,"Line %d: if(condition) goto Label %d:\n",lineno++, label++); fprintf(fp_out,"Line %d: goto Label %d:\n",lineno++,label++); break; case '$': strcpy(pointer_variables[number++],lval); //printf("%s\n",lval); case 'N': reading_ident_list = 0; reading_integer_list = 0; reading_float_list = 0; reading_string_list = 0; break; case ';': strcpy(pointer_variables[number++],lval); case 'D': reading_ident_list = 0; reading_integer_list = 0; reading_float_list = 0; reading_string_list = 0; break; case '#': strcpy(pointer_variables[number++],lval); case 'L': reading_ident_list = 0; reading_integer_list = 0; reading_float_list = 0; reading_string_list = 0; break; case 'T': break; case 'Q': break; case 'O': fprintf(fp_out,"Line %d: condition = %s\n",lineno++, lval); fprintf(fp_out,"Line %d: if !(condition) then goto Label 1 \n",lineno++); break; case 'Y': fprintf(fp_out,"Line %d: Label 3: \n",lineno++); break; case 'E': if (a->l->nodetype == '+' || a->l->nodetype == '-') { CPRINT(lineno, tempvars[tempvarindex], lval); fprintf(fp_out,"Line %d: %s = %s\n", lineno++, tempvars[tempvarindex], lval); sprintf(lval,"%s", tempvars[tempvarindex++]); } break; case 'S': return lval; break; case '1': return_type = 1; fprintf(fp_out,"Line %d: procedure int %s ()\n", lineno++, lval); proctype[procindex] = 1; strcat(procname[procindex++],lval); break; case '2': return_type = 2; fprintf(fp_out,"Line %d: procedure float %s ()\n", lineno++, lval); proctype[procindex]=2; strcat(procname[procindex++],lval); break; case '3': return_type = 3; fprintf(fp_out,"Line %d: procedure string %s ()\n", lineno++, lval); proctype[procindex]=3; strcat(procname[procindex++],lval); break; case '4': fprintf(fp_out,"Line %d: procedure void %s ()\n", lineno++, lval); strcat(procname[procindex++],lval); break; case '5': fprintf(fp_out,"Line %d: Call %s(), 0 \n", lineno++, lval); break; case '6': if(procp_used == 1) { if(number != 0) { int i = 0; for(i = 0; i<number; i++) fprintf(fp_out,"Line %d: param = %s\n", lineno++, pointer_variables[i]); number = 0; } fprintf(fp_out,"Line %d: return %s \n", lineno++, lval); } else { in_method=0; procedure_is_valid_rvalue(lval); int loc = procedure_check_table(lval); if(procedure[proccount-1]->entries[loc].type != return_type) yyerror(" return type do not match\n"); fprintf(fp_out,"Line %d: return %s \n", lineno++, lval); } break; case '8': fprintf(fp_out,"Line %d: return \n", lineno++); break; case '7': strcat(lval, " = "); break; case 'V': case '@': break; case '^': break; case '~': fprintf(fp_out,"Line %d: procedure int %s (", lineno++, lval); strcpy(procedure_names[procp_number++],lval); break; case '[': fprintf(fp_out,"Line %d: procedure float %s (", lineno++, lval); break; case '(': fprintf(fp_out,"Line %d: procedure string %s (", lineno++, lval); break; case ')': fprintf(fp_out,"Line %d: procedure void %s (", lineno++, lval); break; case '_': break; case ']': break; case '9': break; case ':': break; case '.': break; case ',': break; case '?': //printf("%s, ", lval); strcpy(procedure_compare[procp_compare_number++],lval); //printf("%s\n",lval); strcat(fcall, lval); break; case 'U': sprintf(fcall,"Line %d: %s = Call ", lineno++, lval); break; default: printf("Error: it's here at the left section Unknown node type: %c\n", a->nodetype); break; } } if (a->r) { if(a->nodetype=='J') { fprintf(fp_out,"Line %d: Label %d:\n",lineno++, label-2); } if(a->nodetype == 'V') { in_main = 0; procedure[proccount] = (struct sym_table*) malloc(sizeof(struct sym_table)); procedure[proccount]->size=0; procedure[proccount]->max_size=32; procedure[proccount]->entries = (struct sym_table_entry*) malloc(procedure[proccount]->max_size*sizeof(struct sym_table_entry)); proccount++; } rval = eval(a->r); switch (a->nodetype) { case '=': gencode(rval); if (a->r->nodetype=='S') { is_valid_rvalue(rval); if(in_main==0) procedure_is_valid_rvalue(rval); } if(a->r->nodetype == 'S' || a->r->nodetype == 'K' || a->r->nodetype == 'F' || a->r->nodetype == 'Z' ) strcat(lval, rval); else strcat(lval, tempvars[tempvarindex-1]); val = lval; break; case '+': case '-': case '*': case '/': case '%': case '&': case '|': case '!': case '<': case '>': case 'B': case 'C': case 'G': case 'H': if(a->r->nodetype == 'S') { is_valid_rvalue(rval); if(in_main==0) procedure_is_valid_rvalue(rval); } strcat(lval,rval); sprintf(tmpstr,"%c", a->nodetype); strcat(lval,tmpstr); return lval; break; case 'I': case 'A': case 'P': break; case 'T': break; case 'Q': break; case 'O': if (parent == 1) fprintf(fp_out,"Line %d: goto Label 3: \n",lineno++); parent = 0; fprintf(fp_out,"Line %d: Label 1:\n",lineno++); break; case 'Y': break; case 'J': fprintf(fp_out,"Line %d: Label %d:\n",lineno++, count*3); count--; break; case 'E': CPRINT_WR(lineno, rval); if(funcp_write == 1) { fprintf(fp_out,"Line %d: param = %s \n",lineno++, rval); //********INCOMLETE***********SYMBOL TABLE CHANGING MAY CAUSE TROUBLE LATER WHEN CODING int x = check_table(rval); sprintf(temp_variable, "%d", st->entries[x].type ); strcat(procedure_compare[procp_compare_number-1],temp_variable); count_para++; } else fprintf(fp_out,"Line %d: write %s\n",lineno++, rval); return; // return so we don't print an extra "write" statement case '1': break; case '2': case '3': case '4': case '5': case '6': break; case '7': is_valid_procname(rval); strcat(lval, "Call "); strcat(lval, rval); strcat(lval, "(), 0"); val = lval; break; case 'V': case '@': break; case '^': break; case '~': break; case '[': break; case '(': break; case ')': break; case '_': break; case ']': break; case '9': break; case ':': break; case '.': break; case ',': break; case ';': break; case '$': break; case '#': break; case '?': funcp_write = 1; fprintf(fp_out,"%s",fcall); fprintf(fp_out,", %d\n",count_para); funcp_write = 0; break; case 'U': { int i; int result = -1; for(i=0;i<procp_number;i++) { if (strcmp(procedure_compare[procp_compare_number-1], procedure_names[i]) == 0) {result = 0; break; } } if(result !=0) yyerror("Function Call do not match\n"); } break; default: printf("Error: it's here at the right section Unknown node type: %c\n", a->nodetype); break; } } // Only for non-literal or non-identifier nodes switch (a->nodetype) { case 'R': lineno = print_read_input_idents(lineno); break; case '$': case 'N': lineno = print_read_integer_idents(lineno); break; case ';': case 'D': lineno = print_read_float_idents(lineno); break; case '#': case 'L': lineno = print_read_string_idents(lineno); break; case 'W': break; case '=': CPRINT_ASSIGN(lineno, val); if(funcp_write == 1) count_para++; fprintf(fp_out,"Line %d: %s\n",lineno++, val); break; case 'A': case 'P': break; case '+': case '-': case '*': case '/': case '%': case '|': case '&': case '!': case 'B': case 'C': case 'G': case 'H': case '<': case '>': case 'J': break; case 'T': case 'Q': case 'O': case 'Y': break; case 'I': break; case 'E': CPRINT_WR(lineno, lval); if(funcp_write == 1) { int x = check_table(lval); sprintf(temp_variable, "%d", st->entries[x].type ); strcat(procedure_compare[procp_compare_number-1],temp_variable); //sprintf(procedure_compare[procp_compare_number-1], "%d", st->entries[x].type ); count_para++; fprintf(fp_out,"Line %d: param = %s \n",lineno++, lval); } else fprintf(fp_out,"Line %d: write %s\n",lineno++, lval); return lval; case '1': case '2': case '3': case '4': case '5': case '6': break; case '7': CPRINT_ASSIGN(lineno, val); fprintf(fp_out,"Line %d: %s\n",lineno++, val); break; case '8': break; case 'V': case '@': break; case '^': break; case '~': break; case '[': break; case '(': break; case ')': break; case '_': break; case ']': break; case '9': break; case ':': break; case '.': break; case ',': break; case '?': break; case 'U': break; default: printf("Error: it's here at the last section Unknown node type: %c\n", a->nodetype); return; } }