Le parser fourni dans parser_automata.jj prend en paramètre de ligne de commande un nom de fichier et génére l'Abstract Syntaxe Tree (AST) au format .dot sur la sortie standard.
Le fichier .dot décrit l'AST qu'on peut visualiser avec l'outil graphviz.
Votre tâche consiste à créer une méthode make pour chaque classe interne de Ast afin de générer un interpréteur de transitions. L'intepréteur doit posséder une méthode qui lance le calcul. Par exemple
- boolean eval() pour les Conditions
- ... exec() pour les Actions (il est possible de rendre un booléen qui indique si l'action a pu s'effectuer ou non).
The parser can generate two graphical output in .dot format
- with option:
-ast
it produces the Abstract Syntax Tree (see example/ast.dot) - with option:
-aut
it produces the graphical representation of the parsed automata (see example/aut.dot)
The parser can take input
- from a file
java -cp ./bin ricm3.parser.AutomataParser -aut -file example/automata.txt
- from a string ``java -cp ./bin ricm3.parser.AutomataParser -aut -string "Aut(Idle){ * (Idle)}"
- N = North
- S = South
- E = East
- O = Ouest
- F = front
- B = back
- L = on my left
- R = on my right
- les lettres a,...,z
- les chiffres 0...9
- SPACE, ENTER,
- les flêches: FU, FD, FR, FL
- V = Void
- T = Team = une entité de mon équipe
- A = un Adversaire
- D = un Danger
- P = un élément qu on peut Prendre,stocker,lancer,déposer
- J = un élément sur lequel on peut sauter
- G = un Gate
- M = un Missile
- True
- Key(Touche) : la Touche est enfoncée
- MyDir(Direction) : l'entité est orientée dans la Direction
- Cell(Direction, Entité) : La cellule dans la Direction contient une Entité
- Closest(Entité, Direction) : la plus proche Entité est dans la Direction
- GotPower : reste t'il de l'énergie à l'entité ?
- GotStuff : reste t'il des choses dans le store ?
- conjonction: Condition1 & Condition2
- disjunction: Condition1 / condition2
- negation: not(Condition)
-
Si dans votre jeu une action Wizz n'a pas de direction. alors vous interpréterait Wizz(U) comme Wizz.
-
Si, au contraire, l'action Wizz doit avoir une direction et que l'automate n'en donne pas. Vous interpreterez Wizz comme Wizz(F).
- Wizz(Direction) = ?
- Pop(Direction) = ?
- Move(Direction) = déplacement
- Jump(Direction) = saut
- Turn(Direction) = changement de direction (sans déplacement)
- Example:
- Turn(R) = +90 degree : clockwise
- Turn(B) = 180 degree
- Turn(L) = -90 degree : counter-clockwise
- Hit(Direction) = frapper
- Protect(Direction) = protection
- Pick(Direction) = ramasser une chose
- Throw(Direction) = lancer/déposer ce que l entité a dans la main.
- Store = mettre en réserve (dans son sac)
- Get = prendre une entité dans sa réserve si aucune en main, changer d entité si une en main (elle est remise dans le sac)
- Power = pas d'action, mais récupération d'énergie.
- Kamikaze = disparition, suicide, explosion, tranformation en autre chose, ...