/CoMe_NG

🌍 ✈ Convertisseur Melissa de Nouvelle GĂ©nĂ©ration (CoMe_NG), grand frĂšre de CUJAS !

Primary LanguageRuby

Projet Compilation S4 (CoMe_NG)

CoMe_Ng, le cousin éloigné de Melissa

Rendu obsolÚte par son petit frÚre CUJaS (Convertisseur unifié en Java pour les SiTac).

Objectifs du projet

La création d'un compilateur, composé impérativement :

  • d'un lexer
  • d'un parser
  • d'un gĂ©nĂ©rateur d'AST
  • d'un pretty-printer permis par le pattern Visiteur

Portée du sujet

Le sujet, au-delĂ  du projet de compilation en lui-mĂȘme, est rĂ©alisĂ© au profit des Ă©quipages CN-235 de l'ArmĂ©e de l'Air et de l'Espace, et peut donc sembler plutĂŽt spĂ©cifique. Nous allons donc le prĂ©senter ici.

Les attendus

Les équipages de transport, lors de vols tactique, ont besoin en amont de préparer leur "Situation Tactique" (SiTac). Cette derniÚre, réalisée sur des outils spécialisés (tels Melissa_NG), est alors généralement imprimée puis emportée dans le cockpit en version papier.

NĂ©anmoins, dans le cadre de vols d'entraĂźnement, pour lesquels les donnĂ©es sont Non ProtĂ©gĂ©es car imaginĂ©es pour besoin d'exercice, il devient intĂ©ressant de pouvoir disposer d'une version numĂ©rique de cette SiTac, pouvant ĂȘtre affichĂ©e sur les iPads des Ă©quipages.

Les logiciels ne possédant pas nativement de capacités d'exportation au format kml, il était nécessaire de fournir un tel outil, permettant de générer un fichier kml à partir d'une SiTac exportée dans le format permis par le logiciel.

Une premiÚre version trÚs succincte de ce projet, réalisée en VBA sur Microsoft Excel, a été réalisée par mes soins au sein de l'unité, et il semblait indispensable d'en proposer une version plus adaptée et facile d'utilisation.

Entrée

Un fichier exporté par un logiciel de cartographie spécialisée, au format XML, de forme dépendant du logiciel utilisé (NTK, Melissa_NG...).

Sortie

Un fichier kml contenant les objets de la SITAC, qu'il est possible d'afficher sur un outil de cartographie grand public (Google Earth, TacView...)

Le projet

Le projet, intitulé "CoMe_NG", pour "Convertisseur Melissa de Nouvelle Génération", écrit en Ruby, permet donc de réaliser cette conversion de maniÚre simple et rapide.

Utilisation

On donne un fichier test.xml, dans le rĂ©pertoire input, Ă  des fins de test. D'autres fichiers, gĂ©nĂ©rĂ©s par ntk, pourront ĂȘtre ajoutĂ©s au fur et Ă  mesure des essais menĂ©s en escadron.

  • Commencer par installer les dĂ©pendances Ruby depuis le rĂ©pertoire du projet :
bundle install
  • Puis lancer simplement l'interface graphique :
ruby lib/come_ui.rb

Une fois l'interface graphique lancée, elle ressemble à ceci : ui_main.png Il suffit alors de choisir le fichier à ouvrir, puis de générer le kml. Le programme demandera l'emplacement souhaité pour le fichier à générer (le nom du fichier est généré automatiquement).

Une fois le fichier généré, on peut ouvrir le répertoire le contenant en cliquant sur le bouton correspondant.

ui_done.png

Structure du projet

Le projet est composé des fichiers Ruby suivants :

  • come_andline.rb : le fichier principal permettant un fonctionnement en ligne de commande (obsolĂšte)
  • come_ui.rb : le fichier principal permettant un fonctionnement en interface graphique
  • sitac_lexer.rb : le lexer, qui permet de "dĂ©couper" le fichier XML en tokens
  • sitac_parser.rb : le parser, qui permet de "parser" les tokens et de gĂ©nĂ©rer l'AST
  • ast.rb permettant la gĂ©nĂ©ration de l'AST
  • sitac_objects.rb : le fichier contenant les classes gĂ©nĂ©riques des objets de la SiTac
  • sem_ntk.rb : le fichier contenant la sĂ©mantique spĂ©cifique Ă  la SiTac NTK
  • kml_maker.rb : conversion des objets crĂ©Ă©s en fichier KML
  • log_utils.rb implĂ©mentant un logger, permettant d'afficher des informations claires dans la console
  • token.rb implĂ©mentant la classe Token, permettant de reprĂ©senter les tokens

Objets pris en charge

classDiagram
direction BT
class Bullseye {
    vradius
    name
    center
    ring_distance
    hradius
    rings
}
class Circle
class Corridor {
    name
    width
    end_point
    start_point
}
class Ellipse {
    vradius
    name
    center
    hradius
}
class Figure
class Line {
    name
    points
}
class Point {
    name
    longitude
    latitude
}
class Polygon
class Rectangle {
    name
    start
    horizontal
    vertical
}
class SITACObjects

Figure  -->  Bullseye 
Ellipse  -->  Circle 
Figure  -->  Corridor 
Figure  -->  Ellipse 
SITACObjects  ..>  Figure 
Figure  -->  Line 
Figure  -->  Point 
Line  -->  Polygon 
Figure  -->  Rectangle
Loading