yylex() { static int ifdef=0; static char *op2[]={"||", "&&" , ">>", "<<", ">=", "<=", "!=", "=="}; static int val2[]={OROR, ANDAND, RS, LS, GE, LE, NE, EQ}; static char *opc="b\bt\tn\nf\fr\r\\\\"; extern char fastab[]; extern char *outp,*inp,*newp; extern int flslvl; register char savc, *s; char *skipbl(); int val; register char **p2; struct symtab { char *name; char *value; } *sp, *lookup(); for (;;) { extern int passcom; /* this crap makes #if's work */ int opt_passcom = passcom; /* even with -C option */ passcom = 0; /* (else comments make syntax errs) */ newp=skipbl(newp); passcom = opt_passcom; /* nb: lint uses -C so its useful! */ if (*inp=='\n') return(stop); /* end of #if */ savc= *newp; *newp='\0'; for (p2=op2+8; --p2>=op2; ) /* check 2-char ops */ if (0==strcmp(*p2,inp)) {val=val2[p2-op2]; goto ret;} s="+-*/%<>&^|?:!~(),"; /* check 1-char ops */ while (*s) if (*s++== *inp) {val= *--s; goto ret;} if (*inp<='9' && *inp>='0') {/* a number */ if (*inp=='0') yylval= (inp[1]=='x' || inp[1]=='X') ? tobinary(inp+2,16) : tobinary(inp+1,8); else yylval=tobinary(inp,10); val=number; } else if (isid(*inp)) { if (0==strcmp(inp,"defined")) {ifdef=1; ++flslvl; val=DEFINED;} else { sp=lookup(inp,-1); if (ifdef!=0) {ifdef=0; --flslvl;} yylval= (sp->value==0) ? 0 : 1; val=number; } } else if (*inp=='\'') {/* character constant */ val=number; if (inp[1]=='\\') {/* escaped */ char c; if (newp[-1]=='\'') newp[-1]='\0'; s=opc; while (*s) if (*s++!=inp[2]) ++s; else {yylval= *s; goto ret;} if (inp[2]<='9' && inp[2]>='0') yylval=c=tobinary(inp+2,8); else yylval=inp[2]; } else yylval=inp[1]; } else if (0==strcmp("\\\n",inp)) {*newp=savc; continue;} else { *newp=savc; pperror("Illegal character %c in preprocessor if", *inp); continue; } ret: *newp=savc; outp=inp=newp; return(val); } }
main() { double p=653,q=751,N=p*q; //N=368292653 // double p=2,q=3,N=p*q; double temp,x=313599//,temp; short msg=101,i,y; tobinary(msg);printf("Original Message: \n"); for(i=0;i<16;i++) printf("%d ",arr[i]); printf("\n\nEncrypted Message: \n"); for(i=15;i>=0;i--) { // srand(NULL); y=yrange[rand()%7]; //y=3; printf("\ny= %d ",y); c[i]=fmod((pow(y,2)*pow(x,arr[i])),N); printf("%ld ",c[i]); } printf("\n\nDecrypted Message: \n"); //decryption for(i=0;i<16;i++) { temp=c[i]; printf("%d ",legendre(temp,p)); } printf("\n\n\n"); system("pause"); }
std::ostream& operator << ( std::ostream& stream, const flowgraph::node* n ) { stream << tobinary( (void*) n ) << " : "; if( n -> ins ) stream << * ( n -> ins ); else stream << " "; stream << " [ "; for( std::list< flowgraph::node* > :: const_iterator p = n -> succ. begin( ); p != n -> succ. end( ); ++ p ) { if( p != ( n -> succ. begin( ))) stream << ", "; stream << tobinary( (void*) *p ); } stream << " ]"; #if 0 stream << ", back[ "; for( std::list< flowgraph::node* > :: const_iterator p = n -> pred. begin( ); p != n -> pred. end( ); ++ p ) { if( p != ( n -> pred. begin( ))) stream << ", "; hexprint( stream, (void*) *p ); } stream << " ]"; #endif return stream; }
std::ostream& operator << ( std::ostream& stream, const flowgraph& g ) { stream << "Flowgraph: \n"; stream << "-----------------------------------\n"; flowgraph::printer pp( stream ); // A const_cast is necessary, because I didn't want to make // two visitors: flowgraph::visitnodes( pp, const_cast< flowgraph::node* > ( & (g.b)), & (g.e) ); stream << "\n"; stream << "(Endnode = " << tobinary( (void*) ( &g. e )) << ")\n"; return stream; }
std::ostream& operator << ( std::ostream& stream, flowgraph::const_iterator it ) { stream << tobinary( (void*) it. n ); return stream; }
void tokenizer::scan( ) { // First we ignore whitespace: while( r. lookahead == ' ' || r. lookahead == '\n' || r. lookahead == '\t' ) { r. moveforward( ); } if( r. lookahead == EOF || r. lookahead == '#' ) { lookahead. push_back( tkn_EOF ); return; } if( r. lookahead == ':' ) { r. moveforward( ); lookahead. push_back( tkn_COLON ); return; } if( r. lookahead == ';' ) { r. moveforward( ); lookahead. push_back( tkn_SEMICOLON ); return; } if( r. lookahead == '?' ) { r. moveforward( ); lookahead. push_back( tkn_QUESTIONMARK ); return; } if( r. lookahead == ',' ) { r. moveforward( ); lookahead. push_back( tkn_COMMA ); return; } if( r. lookahead == '|' ) { r. moveforward( ); if( r. lookahead == '|' ) { r. moveforward( ); lookahead. push_back( tkn_OR ); return; } lookahead. push_back( tkn_SCANERROR ); return; } if( r. lookahead == '&' ) { r. moveforward( ); if( r. lookahead == '&' ) { r. moveforward( ); lookahead. push_back( tkn_AND ); return; } lookahead. push_back( tkn_ADDRESSOF ); return; } if( r. lookahead == '+' ) { r. moveforward( ); if( r. lookahead == '+' ) { r. moveforward( ); lookahead. push_back( tkn_PLUSPLUS ); return; } lookahead. push_back( tkn_PLUS ); return; } if( r. lookahead == '-' ) { r. moveforward( ); if( r. lookahead == '-' ) { r. moveforward( ); lookahead. push_back( tkn_MINUSMINUS ); return; } if( r. lookahead == '>' ) { r. moveforward( ); lookahead. push_back( tkn_ARROW ); return; } lookahead. push_back( tkn_MINUS ); return; } if( r. lookahead == '*' ) { lookahead. push_back( tkn_TIMES ); r. moveforward( ); return; } if( r. lookahead == '/' ) { lookahead. push_back( tkn_DIVIDES ); r. moveforward( ); return; } if( r. lookahead == '!' ) { r. moveforward( ); if( r. lookahead == '=' ) { r. moveforward( ); lookahead. push_back( tkn_NOTEQUAL ); return; } lookahead. push_back( tkn_NOT ); return; } if( r. lookahead == '(' ) { lookahead. push_back( tkn_LPAR ); r. moveforward( ); return; } if( r. lookahead == ')' ) { lookahead. push_back( tkn_RPAR ); r. moveforward( ); return; } if( r. lookahead == '[' ) { r. moveforward( ); lookahead. push_back( tkn_LSQPAR ); return; } if( r. lookahead == ']' ) { r. moveforward( ); lookahead. push_back( tkn_RSQPAR ); return; } if( r. lookahead == '{' ) { r. moveforward( ); lookahead. push_back( tkn_LCURLY ); return; } if( r. lookahead == '}' ) { r. moveforward( ); lookahead. push_back( tkn_RCURLY ); return; } if( r. lookahead == '=' ) { r. moveforward( ); if( r. lookahead == '=' ) { r. moveforward( ); lookahead. push_back( tkn_EQUAL ); return; } lookahead. push_back( tkn_ASSIGN ); return; } if( r. lookahead == '<' ) { r. moveforward( ); if( r. lookahead == '=' ) { r. moveforward( ); lookahead. push_back( tkn_LESSEQUALTHAN ); return; } lookahead. push_back( tkn_LESSTHAN ); return; } if( r. lookahead == '>' ) { r. moveforward( ); if( r. lookahead == '=' ) { r. moveforward( ); lookahead. push_back( tkn_GREATEREQUALTHAN ); return; } lookahead. push_back( tkn_GREATERTHAN ); return; } if( r. lookahead == '.' ) { r. moveforward( ); lookahead. push_back( tkn_DOT ); return; } if( r. lookahead == '\'' ) { r. moveforward( ); if( r. lookahead != '\'' && r. lookahead != '\n' && r. lookahead != EOF ) { char c = r. lookahead; r. moveforward( ); { if( r. lookahead == '\'' ) { r. moveforward( ); lookahead. push_back( tkn_NUMBER ); lookahead. back( ). ct. push_back( ctree( tobinary( c ), ctype( type_prim, identifier( { "char" } )))); return; } } } lookahead. push_back( tkn_SCANERROR ); return; } if( isletter( r. lookahead ) || r. lookahead == '_' ) { std::string attr; attr. push_back( r. lookahead ); r. moveforward( ); while( isletter( r. lookahead ) || isdigit( r. lookahead ) || r. lookahead == '_' ) { attr. push_back( r. lookahead ); r. moveforward( ); } if( attr == "true" ) { lookahead. push_back( tkn_NUMBER ); lookahead. back( ). ct. push_back( ctree( tobinary( true ), ctype( type_prim, identifier( { "bool" } )))); return; } if( attr == "false" ) { lookahead. push_back( tkn_NUMBER ); lookahead. back( ). ct. push_back( ctree( tobinary( false ), ctype( type_prim, identifier( { "bool" } )))); return; } if( attr == "while" ) { lookahead. push_back( tkn_WHILE ); return; } if( attr == "if" ) { lookahead. push_back( tkn_IF ); return; } if( attr == "then" ) { lookahead. push_back( tkn_THEN ); return; } if( attr == "else" ) { lookahead. push_back( tkn_ELSE ); return; } if( attr == "return" ) { lookahead. push_back( tkn_RETURN ); return; } lookahead. push_back( tkn_IDENTIFIER ); lookahead. back( ). ct. push_back( ctree( identifier( { attr } ), ctype( type_unknown ))); // Type will be determined at lookup, which is done during // type checking. return; } // We can only recognize positive numbers, because of // scanning conflicts with - . if( isdigit( r. lookahead )) { std::string s; // We keep the string, so that we can put it in // a scanerror, if necessary. bool canbeint = true; // If we see a . or an exponent, we set it to false. double val = 0.0; while( isdigit( r. lookahead )) { val = val * 10.0 + ( r. lookahead - '0' ); s += r. lookahead; r. moveforward( ); } if( r. lookahead == '.' ) { canbeint = false; double pos = 0.1; s += r. lookahead; r. moveforward( ); if( !isdigit( r. lookahead )) { s += r. lookahead; r. moveforward( ); lookahead. push_back( tkn_SCANERROR ); lookahead. back( ). reason. push_back(s); return; } while( isdigit( r. lookahead )) { val += pos * ( r. lookahead - '0' ); pos /= 10.0; s += r. lookahead; r. moveforward( ); } } if( r. lookahead == 'e' || r. lookahead == 'E' ) { canbeint = false; unsigned int ee = 0; int polarity = 1; s += r. lookahead; r. moveforward( ); if( r. lookahead == '+' || r. lookahead == '-' ) { if( r. lookahead == '-' ) polarity = -1; s += r. lookahead; r. moveforward( ); } if( !isdigit( r. lookahead )) { s += r. lookahead; r. moveforward( ); lookahead. push_back( tkn_SCANERROR ); lookahead. back( ). reason. push_back(s); return; } while( isdigit( r. lookahead )) { ee = ee * 10 + ( r. lookahead - '0' ); s += r. lookahead; r. moveforward( ); } // We need to put val = val * 10^( polarity * ee ): // Is this efficient? Probably not, but it is simple. if( polarity == 1 ) { while( ee ) { val *= 10.0; -- ee; } } else { while( ee ) { val /= 10.0; -- ee; } } } lookahead. push_back( tkn_NUMBER ); if( !canbeint || floor( val ) != val || val > (double) INT_MAX ) { lookahead. back( ). ct. push_back( ctree( tobinary( val ), ctype( type_prim, identifier( { "double" } )))); return; } if( val == 0.0 || val == 1.0 ) { lookahead. back( ). ct. push_back( ctree( tobinary( val == 1.0 ), ctype( type_prim, identifier( { "bool" } )))); return; } if( val < 256 ) { lookahead. back( ). ct. push_back( ctree( tobinary( static_cast< char > ( val )), ctype( type_prim, identifier( { "char" } )))); return; } // Remaining case is just int: lookahead. back( ). ct. push_back( ctree( tobinary( static_cast< int > ( val )), ctype( type_prim, identifier( { "int" } )))); return; } // If we could not recognize anything, then we produce // a scan error. lookahead. push_back( tkn_SCANERROR ); std::string s; if( r. lookahead != EOF ) { s += r. lookahead; r. moveforward( ); // It is important that we always advance the reader, // because otherwise the tokenizer hangs. } else { s += "eof"; // This should actually be unreachable, because // EOF is checked in the beginning. } lookahead. back( ). reason. push_back(s); return; }
int main(int argc,char *argv[]) {int a,l,b1,b2,ch; l=strlen(argv[3]); char *in=argv[3]; b1=atoi(argv[1]); b2=atoi(argv[2]); if((b1==2)&&(b2==8)) ch=1; else if((b1==2)&&(b2==10)) ch=2; else if((b1==2)&&(b2==16)) ch=3; else if((b1==8)&&(b2==2)) ch=4; else if((b1==8)&&(b2==10)) ch=5; else if((b1==8)&&(b2==16)) ch=6; else if((b1==10)&&(b2==2)) ch=7; else if((b1==10)&&(b2==8)) ch=8; else if((b1==10)&&(b2==16)) ch=9; else if((b1==16)&&(b2==2)) ch=10; else if((b1==16)&&(b2==8)) ch=11; else if((b1==16)&&(b2==10)) ch=12; else if((b1==2)&&(b2==2)) ch=13; else if((b1==8)&&(b2==8)) ch=14; else if((b1==10)&&(b2==10)) ch=15; else if ((b1==16)&&(b2==16)) ch=16; switch(ch) { case 1: b1=2;b2=8; a=checkbi(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 2: b1=2,b2=10; a=checkbi(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 3: b1=2; a=checkbi(in,l); if(a==1) tohex(in,b1,l); else {printf("0"); }break; case 4: b1=8,b2=2; a=checkoct(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 5: b1=8,b2=10; a=checkoct(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 6: b1=8; a=checkoct(in,l); if(a==1) tohex(in,b1,l); else {printf("0"); }break; case 7: b1=10,b2=2; a=checkdeci(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 8: b1=10,b2=8; a=checkdeci(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 9: b1=10; a=checkdeci(in,l); if(a==1) tohex(in,b1,l); else {printf("0"); }break; case 10: b1=16,b2=2; a=checkhex(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 11: b1=16,b2=8; a=checkhex(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 12: b1=16,b2=10; a=checkhex(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 13: b1=2,b2=2; a=checkbi(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 14: b1=8,b2=8; a=checkoct(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 15: b1=8,b2=8; a=checkdeci(in,l); if(a==1) tobinary(in,b1,b2,l); else {printf("0"); }break; case 16: b1=16; a=checkhex(in,l); if(a==1) tohex(in,b1,l); else {printf("0"); }break; } printf("\n"); return 0; }