Come mappare un'API in un'altra?

-5

Dopo qualche ricerca su google, mi sento ancora nel fango.

Mi chiedo se qual è l'approccio migliore per la scrittura di wrapper che mappano due API simili che offrono una semantica simile ma forse in diversi modelli, sintassi o stili.

Ad esempio: mappa Cairo (una libreria grafica) in Java2D (un'altra libreria grafica, con un modello semantico abbastanza simile).

PS: un brainstorming su cosa sarebbe bello avere in uno strumento integrato che supporta tale progetto per mappare la libreria A nella libreria B .

  • Un motore di semantica formale (ad esempio K-framework) per definire la semantica del dominio ( A ) e la semantica dell'immagine ( B )
  • Alcuni parser configurabili basati su regole per eseguire l'analisi del codice statico sul lato dominio per riconoscere i pattern di utilizzo nelle chiamate a codice A e utilizzarli per suggerire pattern mappati in termini di B
  • Un motore di trasformazione (sostituisce nel codice sorgente chiama A con snippet equivalenti usando B , basato forse sulla semantica formale menzionata sopra

Quindi la mia domanda è se esiste qualche framework, o almeno un approccio allo stato dell'arte che fornisca la maggior parte di questa roba in un'API -truttura di trasformazione. Ho alcune API da portare e mi servirebbero due anni e mezzo se dovessi farlo a mano ...

EDIT : dopo ulteriori ricerche e suggerimenti ricevuti da altri, sto iniziando a perdere la speranza su un approccio comprovato e ben noto (all'interno della nicchia), senza menzionare nemmeno gli strumenti dedicati. D'altra parte, mi sono imbattuto in un gruppo di tactiques meno specifici che potrebbero (o potrebbero non) funzionare :

  • XML per la definizione della semantica (ci sono diversi formati là fuori specificatamente destinati a definire la sintassi, probabilmente altri possono essere trovati per definire un piccolo linguaggio di logica)
  • XSLT per la trasformazione (da implementare da zero); se si potesse collegare una struttura semantica formale per la convalida della trasformazione, come la K-Framework , sarebbe più interessante
  • Uno strumento di analisi del dominio da implementare non da zero, ma sulla base di alcune API di analisi del codice (ad esempio quella utilizzata da FindBugs o qualsiasi altro strumento di questo tipo)

EDIT2: Mi chiedo il motivo per cui questa domanda sia stata downvoted senza alcun feedback. Mi chiedo quanti di questi downvoters abbiano effettivamente capito di cosa si tratta veramente il problema.

    
posta AmazingWouldBeGreatBut 22.09.2017 - 12:16
fonte

1 risposta

0

Il problema è simile alla decompilazione e alla ricompilazione. Mi avvicinerei come segue:

  • Fase di decompilazione: utilizzando un parser, crea un albero di sintassi astratto delle chiamate effettuate per creare e modificare oggetti.
  • Fase di ricompilazione: utilizzando trasformazioni e tecniche simili a ottimizzatori di compilatori (riconoscimento di modelli comuni), generare output utilizzando la nuova API.

Non userei nulla come xlst perché stai lottando con lo strumento sbagliato per il lavoro. Usa qualcosa come ANTLR.

Se non hai una base di codice davvero enorme, potresti scoprire che la creazione di questo strumento di generazione del codice richiede più tempo rispetto alla conversione del codice.

    
risposta data 22.09.2017 - 18:58
fonte