projet-genie-logiciel-systeme/workspace/game/bin/xtext/Game.xtext
2021-11-30 21:50:41 +01:00

159 lines
3.8 KiB
Plaintext

grammar xtext.Game with org.eclipse.xtext.common.Terminals
generate game "http://game"
// https://gist.github.com/nightscape/629651
Jeu:
'{'
explorateur=Explorateur
territoire=Territoire
objets+=Objet*
connaissances+=Connaissance*
personnes+=Personne*
transformations+=Transformation*
'}'
;
Explorateur:
'"Explorateur"' ':' '{'
'"taille"' ':' tailleInventaire=INT ','
'"connaissances"' ':' '[' (connaissance+=Nom (',' connaissances+=Nom)*)? ']' ','
'"objets"' ':' '[' (objets+=Item (',' objets+=Item)*)? ']'
'}'
;
Item:
'{'
'"nom"' ':' nom=Nom ','
'"qty"' ':' qty=INT
'}'
;
Territoire:
'"Territoire"' ':' '{'
'"Lieux"' ':' '[' (lieux+=Lieu (lieux+=Lieux)*)? ']' ','
'"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"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"connaissances"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']'
'}'
;
Chemin:
'{'
'"lieu_in"' ':' lieuIn=Nom ','
'"lieu_out"' ':' lieuOut=Nom ','
'"ouver"' ':' ouvert=Condition ','
'"visible"' ':' visible=Condition ','
'"obligatoire"' ':' obligatoire=Condition ','
'"connaissances_gift"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_gift"' ':' '[' (objetsGift+=Nom (objetsGift+=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:
'Interaction'
'{'
'"visible"' ':' visible=Condition ','
'"connaissances_gift"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_gift"' ':' '[' (objetsGift+=Nom (objetsGift+=Nom)*)? ']' ','
'"actions"' ':' '[' (actions+=Action)+ ']' ','
'}'
;
Action:
'{'
'"visible"' ':' visible=Condition ','
'"connaissances_gift"' ':' '[' (connaissances+=Nom (connaissances+=Nom)*)? ']' ','
'"objets_gift"' ':' '[' (objetsGift+=Nom (objetsGift+=Nom)*)? ']' ','
'"objets_conso"' ':' '[' (objetsConso+=Nom (objetsConso+=Nom)*)? ']' ','
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_' connaissance=Nom
;
AntiConditionConnaissance:
'!' 'connaissance_' connaissance=Nom
;
ConditionConnaissance:
'objet_' objet=Nom comparateur=Comparateur nombre=INT
;
Comparateur:
'<' | '>' | '==' | '<=' | '>=' | '!='
;
Nom:
'"' STRING '"'
;