Discussion: Grammaire R++ V0.0

  1. #1
    Membre éclairé

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    septembre 2007
    Messages
    200
    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 : 200
    Points : 714
    Points
    714

    Par défaut Grammaire R++ V0.0

    Oui, je sais, la version 0.0 de R++ n'est pas censée exister... Elle vient pourtant d'être ajoutée. Elle n'a aucun intérêt, c'est juste pour amorcer la grammaire. C'est la même que la 0.1 sans les types récursifs, sans les "<-" ni les "[" et avec très peu d'opérations possibles.

    1 Définition des token

    1.1 Expressions régulières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    letterMaj		[A-Z]
    letterMin		[a-z]
    letter			letterMaj | letterMin
    digit			[0_9]
    digit_not_nul		[1_9]
    other			é | è | ç | à | ê | ù               // on complètera
    ascii			letter |digit | other
    1.2 Constantes typées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    LIT_LOGICAL		TRUE | FALSE
    LIT_INTEGER		("-"|"+")? (digitNotNul digit* | "0")
    LIT_NUMERIC		LIT_INTEGER "." digit+ ("E" LIT_INTEGER)?
    LIT_CHARACTER		QUOTE1 ascii* QUOTE1 | QUOTE2 ascii* QUOTE2 | QUOTE3 ascii* QUOTE3
    LIT_VECTOR              "c"
    LIT_SUITE               "suite"
    LIT_LIST                "list"
    LIT_TYPE_COMPOSE        LIT_VECTOR | LIT_SUITE | LIT_LIST
    
    LOGICAL		TRUE | FALSE
    INTEGER		("-"|"+")? (digitNotNul digit* | "0")
    NUMERIC		INTEGER "." digit+ ("E" INTEGER)?
    CHARACTER	QUOTE1 ascii* QUOTE1 | QUOTE2 ascii* QUOTE2
    1.3 Les mots clefs du langage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET		set
    GET		get
    TYPE		type
    IS_EQUAL	isEqual

    Dans le formalisme du langage, les affectations seront possibles via 'set' ou via '<-'. Les acces se feront via 'get' ou en tapant simplement le nom de la variable. Ainsi, les lignes 1 et 2 sont rigoureusement identiques, idem pour les lignes 4 et 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    aze.set(3)
    aze <- 3
    
    aze.get()
    aze
    Question : spécifie-t-on dans la grammaire que les codes des lignes 2 et 5 sont acceptables, ou fait-on tourner un pré parseur qui ré écrit systématiquement les lignes 2 en lignes 1 et les lignes 5 en lignes 4 ?


    1.4 Operateurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PLUS		+
    MULT		*
    AND		AND
    OR		OR
    1.5 Identifiants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IDENTIFIANT	letter (letter|digit)*
    1.6 Ponctuation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    COMMA		,
    OPEN_PAR	(
    CLOSE_PAR	)
    DOT		.
    QUOTE1		'
    QUOTE2		"
    2 Règles syntaxiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    prog 		-> stmt*
    stmt 		-> <IDENTIFIANT> <DOT> method <OPEN_PAR> args? <CLOSE_PAR> 
    method		-> <SET> | <GET> | <TYPE> | <IS_EQUAL>
    args 		-> expression (<COMMA> expression)* 
    expression 	-> expression2 (operateur expression2)*
    expression2	-> <OPEN_PAR> expression <CLOSE_PAR> | value
    value 		-> <LOGICAL> | <INTEGER> | <NUMERIC> | <CHARACTER> | <IDENTIFIANT>

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    août 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : août 2013
    Messages : 10
    Points : 13
    Points
    13

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    prog 		-> stmt*
    stmt 		-> <IDENTIFIANT> <DOT> method <OPEN_PAR> args? <CLOSE_PAR> 
    method	        -> <SET> | <GET> | <TYPE> | <IS_EQUAL>
    args 		-> expression (<COMMA> expression)* 
    expression 	-> expression2 (operateur expression2)*
    expression2	-> <OPEN_PAR> expression <CLOSE_PAR> | value
    value 		-> <LOGICAL> | <INTEGER> | <NUMERIC> | <CHARACTER> | <IDENTIFIANT>
    operateur       -> <PLUS> | <MINUS> | <MULT> | <DIV> | <AND> | <OR>

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    août 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : août 2013
    Messages : 10
    Points : 13
    Points
    13

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    COMMA		,
    OPEN_PAR	(
    CLOSE_PAR	)
    DOT		.
    QUOTE1		'
    QUOTE2		"
    Dans le code envoyé (syntax.jj), QUOTE1 et QUOTE2 ont des valeurs inverses.

Discussions similaires

  1. [LambdaProlog] grammaire en Java
    Par khokho dans le forum APIs
    Réponses: 3
    Dernier message: 04/07/2005, 11h26
  2. grammaire yacc lex simili C
    Par BigBarbare dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 16/05/2005, 22h40
  3. Décomposition d'une propriété : grammaire ?
    Par mathieu dans le forum Général Algorithmique
    Réponses: 3
    Dernier message: 04/05/2004, 10h47
  4. Réponses: 2
    Dernier message: 21/05/2002, 11h25

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