Esempio n. 1
0
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();                       
  
  
   
}
Esempio n. 2
0
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();                       
  
  
 
}
Esempio n. 3
0
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;
	}
}