IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Construction d'un langage : grammaire, et puis ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Par défaut Construction d'un langage : grammaire, et puis ?
    Bonjour,

    Je suis en train de construire un mini langage (ultra simple, c'est juste pour essayer), un truc qui pourra faire :
    Code Mon langage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    integer toto
    toto.set(3+2)
    toto.get()
    logical titi
    titi.set(TRUE)
    titi.get()

    J'ai défini une grammaire en utilisant javacc (code si-dessous) et je vise au final un compilateur vers java. A priori, ca marche pas trop mal, les expressions sont reconnues :
    Code Grammaire : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    PARSER_BEGIN(SyntaxChecker)
     
    public class SyntaxChecker {
        public static void main(String[] args) {
            try {
                new SyntaxChecker(new java.io.StringReader(args[0])).programme();
                System.out.println("Syntax is okay");
            } catch (Throwable e) {
                // Catching Throwable is ugly but JavaCC throws Error objects!
                System.out.println("Syntax check failed: " + e.getMessage());
            }
        }
    }
     
    PARSER_END(SyntaxChecker)
     
    SKIP:  { "\t" | "\n" | "\r" }
    TOKEN: { "+" | 
       <INT: (["0"-"9"])+> | 
       <LOG: ("TRUE"|"FALSE")> |
       <TYPE_LOGICAL:"logical"> | <TYPE_INTEGER:"integer"> |
       <SET:"set">  | <GET:"get"> |
       <ID: (["a"-"z"])+> 
    }
     
    /* Struture générale du programme */
    void programme()  : {} { (instruction())+ <EOF> }
    void instruction(): {} { declaration() | appelMethod() }
     
    /* Déclaration des variables */
    void declaration(): {} { type() " " identifiant() }
    void identifiant(): {} { <ID> }
    void type()       : {} { LOOKAHEAD(3) typeRepete() | typeBasic()}
    void typeBasic()  : {} { <TYPE_LOGICAL> | <TYPE_INTEGER> }
    void typeRepete() : {} { typeBasic() "[" dimension() "]" }
    void dimension()  : {} { <INT> ("," <INT>)* } /* Integer only */
     
    /* Methodes get et set, avec possibilité d'inclure des additions */
    void appelMethod() :{} { identifiant() | methods() }
    void methods()     :{} {LOOKAHEAD(2) set() | get()}
    void set()         :{}{ "." <SET> "(" expression() ")" | "<-" expression()}
    void expression()  :{}{ <INT> ("+" <INT>)* | <LOG> }
    void get()         :{}{ "." <GET> "()" }

    Par contre, je ne sais pas trop quoi faire ensuite... Une fonction de typage ? Un compilateur ? Ca prend quelle forme ? Bref, si vous avez des conseils ou des liens de doc, je suis preneur.

    Merci !

    Christophe

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Bonjour,
    Je te suggérer de regarder ce sujet :
    http://www.developpez.net/forums/d19...a/apis/javacc/

    Sinon, j'avais fait un projet pendant mes études sur la création d'un langage.
    Nous avions utilisé java cup pour la compilation. (Mais le principe est le même.)

    Tu trouvera les sources de ce projet ici :
    https://sourceforge.net/p/compli-a3/code/HEAD/tree/

    C'est très basique comme application.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre chevronné

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Par défaut
    Merci.

    J'ai effectivement regarder le post et les liens que tu indiques. Mais la plus grande partie sont des liens morts...

Discussions similaires

  1. Javacc & construction d'un langage : ou poster ?
    Par Christophe Genolini dans le forum Général Java
    Réponses: 1
    Dernier message: 21/06/2013, 14h42
  2. Grammaire de langages
    Par jalam dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 09/01/2007, 16h30
  3. Réponses: 10
    Dernier message: 09/11/2006, 15h28
  4. [langage] construction d'un hash
    Par kij dans le forum Langage
    Réponses: 18
    Dernier message: 21/04/2005, 23h36
  5. Réponses: 2
    Dernier message: 21/05/2002, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo