grammar xtext.Game with org.eclipse.xtext.common.Terminals generate game "http://game" // https://gist.github.com/nightscape/629651 Jeu: '{' '"Explorateur"' ':' explorateur=Explorateur ',' '"Territoire"' ':' territoire=Territoire ',' '"Objets"' ':' '[' objets+=Objet* ']' ',' '"Connaissances"' ':' '[' connaissances+=Connaissance* ']' ',' '"Personnes"' ':' '[' personnes+=Personne* ']' ',' '"Transformations"' ':' '[' transformations+=Transformation* ']' '}' ; Explorateur: '{' '"taille"' ':' tailleInventaire=INT ',' '"connaissances"' ':' '[' (connaissances+=Nom (',' connaissances+=Nom)*)? ']' ',' '"objets"' ':' '[' (objets+=Nom (',' objets+=Nom)*)? ']' '}' ; Territoire: '{' '"Lieux"' ':' '[' (lieux+=Lieu (lieux+=Lieu)*)? ']' ',' '"Chemins"' ':' '[' (chemins+=Chemin (chemins+=Chemin)*)? ']' '}' ; Lieu: '{' '"nom"' ':' nom=Nom ',' '"deposable"' ':' deposable=Condition ',' '"depart"' ':' depart=Condition ',' '"fin"' ':' fin=Condition ',' '"personnes"' ':' '[' (personnes+=Nom (personnes+=Nom)*)? ']' ',' '"descriptions"' ':' '[' (descriptions+=Description)+ ']' ',' '"objets"' ':' '[' (objets+=Nom (objets+=Nom)*)? ']' ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' '}' ; Chemin: '{' '"lieu_in"' ':' lieuIn=Nom ',' '"lieu_out"' ':' lieuOut=Nom ',' '"ouvert"' ':' ouvert=Condition ',' '"visible"' ':' visible=Condition ',' '"obligatoire"' ':' obligatoire=Condition ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ',' '"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ',' '"objets_conso"' ':' '[' (objetsConso+=Nom (objetsConso+=Nom)*)? ']' ',' '"descriptions"' ':' '[' (descriptions+=Description)+ ']' '}' ; Objet: '{' '"nom"' ':' nom=Nom ',' '"taille"' ':' taille=INT ',' '"visible"' ':' visible=Condition ',' '"descriptions"' ':' '[' (descriptions+=Description)+ ']' '}' ; Transformation: '{' '"condition"' ':' condition=Condition ',' '"objets_in"' ':' '[' (objetsIn+=Nom (objetsIn+=Nom)*)? ']' ',' '"objets_out"' ':' '[' (objetsOut+=Nom (objetsOut+=Nom)*)? ']' ',' '}' ; Connaissance: '{' '"nom"' ':' nom=Nom ',' '"visible"' ':' visible=Condition ',' '"descriptions"' ':' '[' (descriptions+=Description)+ ']' '}' ; Personne: '{' '"nom"' ':' nom=Nom ',' '"visible"' ':' visible=Condition ',' '"obligatoire"' ':' obligatoire=Condition ',' '"interactions"' ':' '[' (interactions+=Interaction (interactions+=Interaction)*)? ']' '}' ; Interaction: '{' '"visible"' ':' visible=Condition ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ',' '"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ',' '"actions"' ':' '[' (actions+=Action)+ ']' ',' '}' ; Action: '{' '"visible"' ':' visible=Condition ',' '"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ',' '"objets_recus"' ':' '[' (objetsRecus+=Nom (objetsRecus+=Nom)*)? ']' ',' '"objets_conso"' ':' '[' (objetsConso+=Nom (objetsConso+=Nom)*)? ']' ',' '"fin_interraction"' ':' finInterraction=Condition '}' ; Description: '{' '"texte"' ':' texte=STRING ',' '"condition"' ':' condition=Condition '}' ; Condition: '(' condition+=ConditionEt ('||' condition+=ConditionEt)* ')' ; ConditionEt: '(' conditionTest+=ConditionTest ('&&' conditonTest+=ConditionTest)* ')' ; ConditionTest: ConditionConnaissance | NOTConditionConnaissance | ConditionObjet | 'true' | 'false' ; ConditionConnaissance: connaissance=Nom ; NOTConditionConnaissance: '!' connaissance=Nom ; ConditionObjet: objet=Nom comparateur=Comparateur nombre=INT ; Comparateur: '<' | '>' | '==' | '<=' | '>=' | '!=' ; Nom: '"' STRING '"' ;