This is an old revision of the document!


Devoir 2 - Langage Robot

Mentions générales

Date limite: 22 Mars, 23:55
Points: 1 point de la note finale
Le devoir est à rendre sur: vmchecker.cs.pub.ro
Rendre en retard: 0.1 points / jour (maximum 4 jours)

Ce que vous avez à faire

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.

  • Si la commande a réussi, il affichera OK x, y, r (exactement comme ceci)
  • S'il y a eu une erreur, il affichera ERROR LINE suivi du numéro de la ligne: et le texte d'erreur.
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.

Les terminaisons de ligne dans le fichier de commandes sont Linux, ce qui signifie simplement \n.

Exemple

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

Règles

  1. Vous ne pouvez pas utiliser RegEx ou une autre bibliothèque qui utilise des expressions régulières
  2. Les fichiers doivent avoir “use strict”
  3. Vos fichiers doivent passer jshint (avec node: true, esnext: true
  4. Le code source doit être indenté (-0.1p)
  5. Vous devez écrire un fichier nommé Readme et expliquer comment vous avez rédigé le devoir (-0.1p)

Copie

Le devoir est individuel. Toute tentative de copie entraînera 0p pour le devoir. Un système anti-copie automatisé sera utilisé.

Questions

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.

NE POSTEZ AUCUN CODE . Ceci est considéré comme la copie et se traduira par un devoir de 0p pour vous.

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/upb-fils/alf|repository] et cliquez sur Watch.

Langage Robot

La Position du Robot

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

Point de départ

Le robot part de (0, 0, 90) dont la position est (0, 0) et la rotation de 90 degrés.

Format des commandes

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

Commandes

FORWARD

Déplace le robot vers l'avant avec un nombre de pixels

Syntaxe
FORWARD pixels
Paramètres

Prend exactement un paramètre

* pixels - un nombre entier qui représent le nombre de pixels à aller vers l'avant

Erreurs

Nombre incorrect de paramètres

ERROR LINE (line_number):FORWARD has 1 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)

BACKWARD

Déplace le robot vers l'arrière avec un nombre de pixels

Syntaxe
BACKWARD pixels
Paramètres

Prend exactement un paramètre

* pixels - un nombre entier qui représent le nombre de pixels à aller vers l'arrière

Erreurs

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)

TURN

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.

Syntaxe
TURN left/right, degrees
Paramètres

Prend exactement deux paramètres

* left ou right - écrites exactement comme ici * degrees - un nombre entier qui représente les degrés à tourner

Erreurs

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)

JUMP

Placez le robot sur une position spécifique. Peu importe l'orientation qu'il a.

Syntaxe
JUMP x, y
Paramètres

Prend exactement deux paramètres

* x - la position x du robot

  • la valeur peut être ~ (tilde) ou un nombre entier
  • ~ signifie qu'il maintient sa position x précédente

* y - la position y du robot

  • la valeur peut être ~ (tilde) ou un nombre entier
  • ~ signifie qu'il maintient sa position y précédente
Erreurs

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)

REPEAT

Répète certaines lignes de commandes jusqu'à END

REPEAT times

Les commandes REPEAT ne sont pas imbriquées (REPEAT en REPEAT)

Paramètres

Prend exactement un paramètre

* times - un nombre entier indiquant le nombre de répétitions des commandes jusqu'à END

Erreurs

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

END

Termine une boucle de répétition

Paramètres

Ne prend pas de paramètres

Erreurs

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

Bonus

Pour un bonus de 0,5p , mettre en œuvre l'imbrication REPEAT (REPEAT en REPEAT).

Le bonus ne sera accordé que si tous les autres tests passent.

Tests

Le devoir sera testé automatiquement à l'aide d'un ensemble de tests publics et privés.

Tests publics

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.

Pour installer nodejs sous Linux ou Windows Linux Subsystem,suivez les instructions:

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

Tests privés

Lorsque vous téléchargez le devoir, il pourrait y avoir quelques tests privés qui doivent être passées. Vmchecker les exécutera.

Vous pouvez toujours télécharger le devoir autant de fois que vous voulez jusqu'à la date limite. Ceci exécutera tous les tests pour vous et affichera le résultat.

Téléchargement du devoir

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.

Readme

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.

Archivage du devoir

Pour télécharger votre devoir, veuillez suivre les instructions suivantes:

  1. Créez une archive zip (pas rar, ace, 7zip ou autre) contenant:
    • votre fichier principal (main.js)
    • vos fichiers javascript (* .js)
    • yarn.lock (si vous utilisez des yarn)
    • le fichier package.json
    • le fichier Readme
  2. connectez-vous avec vmchecker
  3. sélectionnez le cours Automates et Langages Formelles (FILS)
  4. sélectionnez 1. Langage Robot
  5. télécharger l'archive

L'archive doit contenir les fichiers dans sa racine, pas dans un dossier. NE PAS archiver un dossier avec ces fichiers, archivez DIRECTEMENT ces fichiers.

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
alf/teme/tema2.1584266346.txt.gz · Last modified: 2020/03/15 11:59 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0