This is an old revision of the document!
Ce devoir a pour but d'écrire un interpréteur pour le langage Robot . Le langage est utilisé pour déplacer un robot sur un plan plat. Le robot peut aller en avant, en arrière, tourner ou sauter.
Ecrire un interprèteur qui reçoit comme paramètre un fichier avec des commandes et qui écrit sur l'écran la position et la rotation du robot après chaque commande.
node main.js robot_commands.s
Cela exécutera le fichier robot_commands.s et écrira sur l'écran la position et la rotation du robot après chaque commande ou une erreur pour les lignes qui ont des erreurs.
Pour ce fichier robot.s
# Move FORWARD 200 COMMAND_WITH_ERROR BACKWARD 10
l'interprèteur devra afficher
OK 200, 0, 90 ERROR LINE 2: Unknown command COMMAND_WITH_ERROR OK 190, 0, 90
Le devoir est individuel. Toute tentative de copie entraînera 0p pour le devoir. Un système anti-copie automatisé sera utilisé.
Si vous avez des questions concernant le devoir, demandez-les en posant un problème sur github repository. Vous aurez besoin d'un compte github pour cela.
Si vous souhaitez recevoir un courriel quand des problèmes sont posés ou quand il y a de nouveaux messages, allez sur github [https://github.com/alexandruradovici/alf-robot-language-public|repository] et cliquez sur Watch.
Le robot a une position et une rotation. La position est représentée par une paire (x, y) exprimée à l'aide de nombres entiers. La rotation du robot s'exprime en degrés et varie entre 0 et 360.
L'état du robot est exprimé par (x, y, r),qui signifie: * x, y la position * r la rotation en degrés
Le robot part de (0, 0, 90) dont la position est (0, 0) et la rotation de 90 degrés.
Les commandes sont stockées dans un fichier. Chaque commande se trouve sur une ligne distincte.
Le format d'une commande robot est le suivant:
COMMAND parameter1,parameter2,etc
Les commandes peuvent avoir n'importe combien nombre d'espaces avant son nom, entre les paramètres et n'importe combien nombre d'espaces après le dernier paramètre. Voici quelques exemples de commandes valides:
COMMAND p1, p2, p3 COMMAND p1, p2, p3 COMMAND p1,p2,p3
Déplace le robot vers l'avant avec un nombre de pixels
FORWARD pixels
Prend exactement un paramètre
* pixels - un nombre entier qui représent le nombre de pixels à aller vers l'avant
Nombre incorrect de paramètres
ERROR LINE (line_number):FORWARD has 2 parameters, you wrote (number_of_written_parameters)
Type de paramètre incorrect pour pixels
ERROR LINE (line_number): FORWARD parameter 1 requires a number, you wrote (actual_written_parameter_value)
Déplace le robot vers l'arrière avec un nombre de pixels
BACKWARD pixels
Prend exactement un paramètre
* pixels - un nombre entier qui représent le nombre de pixels à aller vers l'arrière
Nombre incorrect de paramètres
ERROR LINE (line_number): BACKWARD has 1 parameters, you wrote (number_of_written_parameters)
Type de paramètre incorrect pour pixels
ERROR LINE (line_number): BACKWARD parameter 1 requires a number, you wrote (actual_written_parameter_value)
Tourne le robot à gauche (dans le sens contraire des aiguilles d'une montre) ou à droite (dans le sens des aiguilles d'une montre) un certain nombre de degrés.
TURN left/right, degrees
Prend exactement deux paramètres
* left ou right - écrites exactement comme ici * degrees - un nombre entier qui représente les degrés à tourner
Nombre incorrect de paramètres
ERROR LINE (line_number): TURN has 2 parameters, you wrote (number_of_written_parameters)
Paramètre incorrect pour gauche / droite
ERROR LINE (line_number): TURN parameter 1 requires a left/right, you wrote (actual_written_parameter_value)
Paramètre incorrect pour les degrés
ERROR LINE (line_number): TURN parameter 2 requires a number, you wrote (actual_written_parameter_value)
Placez le robot sur une position spécifique. Peu importe l'orientation qu'il a.
JUMP x, y
Prend exactement deux paramètres
* x - la position x du robot
* y - la position y du robot
Nombre incorrect de paramètres
ERROR LINE (line_number): JUMP has 2 parameters, you wrote (number_of_written_parameters)
Paramètre incorrect pour x
ERROR LINE (line_number): JUMP parameter 1 requires a number, you wrote (actual_written_parameter_value)
Paramètre incorrect pour y
ERROR LINE (line_number): JUMP parameter 2 requires a number, you wrote (actual_written_parameter_value)
Répète certaines lignes de commandes jusqu'à END
REPEAT times
Les commandes REPEAT ne sont pas imbriquées (REPEAT en REPEAT)
Prend exactement un paramètre
* times - un nombre entier indiquant le nombre de répétitions des commandes jusqu'à END
Nombre incorrect de paramètres
ERROR LINE (line_number): REPEAT has 1 parameters, you wrote (number_of_written_parameters)
Paramètre incorrect pour times
ERROR LINE (line_number): REPEAT parameter 1 requires a number, you wrote (actual_written_parameter_value)
Le fichier se termine et il reste au moins un REPEAT without END
You have number_of_repeats REPEAT without END
Termine une boucle de répétition
Ne prend pas de paramètres
Nombre incorrect de paramètres
ERROR LINE (line_number): END has 0 parameters, you wrote (number_of_written_parameters)
END est utilisé sans a REPEAT précédent
ERROR LINE (line_number): END and no REPEAT
Pour un bonus de 0,5p , mettre en œuvre l'imbrication REPEAT (REPEAT en REPEAT).
Le devoir sera testé automatiquement à l'aide d'un ensemble de tests publics et privés.
Vous pouvez télécharger les tests publics depuis GitHub repository.
Pour exécuter les tests, téléchargez le contenu du repository dans le dossier avec le devoir. Entrez dans le dossier verify et exécutez ./run_all.sh.
cd verify ./run_all.sh
Vous aurez besoin de bash pour cela. Vous pouvez utiliser Linux ou Windows Linux Subsystem.
wget https://nodejs.org/dist/v6.10.0/node-v6.10.0-linux-x64.tar.xz tar xvfJ node-v6.10.0-linux-x64.tar.xz cd node-v6.10.0-linux-x64 sudo cp -R * /usr
Lorsque vous téléchargez le devoir, il pourrait y avoir quelques tests privés qui doivent être passées. Vmchecker les exécutera.
Le devoir devra être téléchargée vers vmchecker. Connectez-vous avec votre nom d'utilisateur moodle, sélectionnez le cours Automates et Langages Formelles (FILS) et téléchargez homeworkarchive.
Le fichier Readme a le format suivant:
Votre nom complet Groupe Une explication de comment vous avez écrit le devoir, qu'avez-vous utilisé, quelles sont les idées principales.
Pour télécharger votre devoir, veuillez suivre les instructions suivantes:
NE PAS inclure node_modules.
Lorsque l'archive est chargée, vmchecker exécute:
unzip archive.zip homework cd homework # si le fichier yarn.lock existe yarn # sinon npm install echo '{ "node":true, "esnext":true }' > .jshintrc jshint *.js