This is an old revision of the document!
Le but de ce travail est de vous familiariser avec les concepts suivants:
Le but du devoir est d'écrire un interprète pour le langage Dessin . Le langage est utilisé pour dessiner des figures et des points géométriques.
Ecrivez un interpréteur qui reçoit un fichier avec des instructions comme des paramètre et écrit un fichier SVG. S'il y a une erreur, l'output sera ERROR LINE suivi du numéro de la ligne et du texte d'erreur.
Le programme reçoit deux paramètres:
Exemple d'utilisation:
node main.js design.dsn canvas.svg
Cela va exécuter le fichier design.dsn et écrire le dessin dans le fichier canvas.svg.
Pour le fichier design.dsn :
& Move POSITION: 200, 200 COMMAND_WITH_ERROR LINE: position 300, 350
l'interpreteur devrait sortir :
ERROR LINE 2: Unknown statement COMMAND_WITH_ERROR
Le devoir est individuel. Toute tentative de copie entraînera 0p pour les devoirs. Système anti-copie automatisé sera utilisé.
Si vous avez des questions concernant les devoirs, posez-les en publiant un problème sur le github repository pour les questions avec le format du titre [design] <titre de votre question>. Vous aurez besoin d'un compte github pour cela.
Si vous souhaitez recevoir un e-mail lorsque des problèmes sont publiés ou lorsqu'il y a de nouveaux messages, accédez au repository pour les questions github et cliquez sur Regarder.
Le langage simplement déplace un stylo. La position initiale du stylet est 0, 0. Lors du dessin, le stylo est déplace vers la nouvelle position.
Les commentaires sont précédés par &.
& Sur cette ligne il y a un commentaire INSTRUCTION: p1 p2 INSTRUCTION: p1 p2
Toutes les instructions acceptent comme paramètres des nombres ou des variables. Les variables ont le format suivant:
%variable
Avant de pouvoir être utilisé, une variable doit recevoir une valeur (en utilisant l'instruction set ).
Les instructions sont stockées dans un fichier. Chaque instruction est sur une ligne distincte.
Le format d'un instruction est le suivant:
INSTRUCTION: paramètre1 paramètre2 etc
Les instructions peuvent avoir n'importe quel nombre d'espaces avant leur nom, entre les paramètres et n'importe quel nombre d'espaces après le dernier paramètre. Voici quelques exemples d'instructions valides:
INSTRUCTION: p1 p2 p3 INSTRUCTION: p1 p2 p3 INSTRUCTION: p1 p2 p3
Toutes les instructions et tous les paramètres sont insensibles à la casse (case insensitive).
Déplace le stylo dans une position, sans rien dessiner.
Les paramètres sont x et y.
POSITION: 150 150 POSITION: %here %there & %here et %there sont des variables qui ont été assignées précédemment
Mauvais nombre de paramètres:
ERROR LINE (line_number):POSITION has 3 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre:
ERROR LINE (line_number): POSITION parameter (the number of the parameter) requires a number or a variable, you wrote (actual_written_parameter_value)
Trace une ligne de la position actuelle vers une autre position ou avec une longueur et un angle spécifiés. Cela sera la nouvelle position du stylo.
LINE: position x y LINE: polar l a
Cela prend exactement trois paramètres
Mauvais nombre de paramètres:
ERROR LINE (line_number):LINE has 3 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre pour type:
ERROR LINE (line_number): LINE parameter 1 requires one of (position, polar), you wrote (actual_written_parameter_value)
Mauvais type de paramètre:
ERROR LINE (line_number): LINE parameter (the number of the parameter) requires a number or a variable, you wrote (actual_written_parameter_value)
Dessine un cercle
Cela ne déplace pas la position actuelle.
CIRCLE: x y r
Il faut exactement trois paramètres
Mauvais nombre de paramètres:
ERROR LINE (line_number): CIRCLE has 3 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre:
ERROR LINE (line_number): CIRCLE parameter (the number of the parameter) requires a number or a variable, you wrote (actual_written_parameter_value)
Dessiner une ellipse
Cela ne déplace pas la position actuelle.
ELLIPSE: x y r1 r2
Il faut exactement quatre paramètres
Mauvais nombre de paramètres:
ERROR LINE (line_number): ELLIPSE has 3 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre:
ERROR LINE (line_number): ELLIPSE parameter (the number of the parameter) requires a number or a variable, you wrote (actual_written_parameter_value)
Dessiner un rectangle
Cela ne déplace pas la position actuelle.
RECTANGLE: x1 y1 x2 y2
Il faut exactement quatre paramètres
Mauvais nombre de paramètres:
ERROR LINE (line_number): RECTANGLE has 4 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre:
ERROR LINE (line_number): RECTANGLE parameter (the number of the parameter) requires a number or a variable, you wrote (actual_written_parameter_value)
Sélectionne la couleur du dessin.
La couleur initiale du stylo est noir. La couleur de remplissage initiale est blanc.
COLOR: pen r g b COLOR: fill r g b
Il faut exactement quatre paramètres
Les valeurs sont comprises entre 0 et 255.
Mauvais nombre de paramètres
ERROR LINE (line_number):COLOR has 4 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètres pour type
ERROR LINE (line_number): COLOR parameter 1 requires one of (pen, fill), you wrote (actual_written_parameter_value)
Mauvais type de paramètre
ERROR LINE (line_number): COLOR parameter (the number of the parameter) requires a number or a variable, you wrote (actual_written_parameter_value)
Valeur hors de portée
ERROR LINE (line_number): COLOR parameter (the number of the parameter) requires a number or a variable between [0, 255], you wrote (actual_written_parameter_value, if it is a variable write the value of the variable)
Répète certaines lignes de déclarations jusqu'à REPEAT
LOOP: times
Les instructions LOOP ne sont pas imbriquées (LOOP dans LOOP)
Cela prend exactement un paramètre
* times - un nombre entier ou une variable spécifiant le nombre de répétitions des instructions jusqu'à REPEAT
Mauvais nombre de paramètres
ERROR LINE (line_number): LOOP has 1 parameters, you wrote (number_of_written_parameters)
Mauvais paramètre pour les temps
ERROR LINE (line_number): LOOP parameter 1 requires a number or a variable, you wrote (actual_written_parameter_value)
Le fichier se termine et il y a encore au moins une boucle sans REPEAT
You have number_of_repeats LOOP without REPEAT
Répète certaines lignes de déclarations jusqu'à REPEAT
WHILE: variable
Les instructions WHILE ne sont pas imbriquées (WHILE dans WHILE)
Cela prend exactement un paramètre
* variable - une variable, si la variable est différente de 0, répète les instructions jusqu'à REPEAT, une ou plusiers fois
Mauvais nombre de paramètres
ERROR LINE (line_number): WHILE has 1 parameters, you wrote (number_of_written_parameters)
Mauvais paramètre pour variable
ERROR LINE (line_number): WHILE parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Le fichier se termine et il y a encore au moins un WHILE sans REPEAT
You have number_of_repeats WHILE without REPEAT
Termine un LOOP ou un WHILE
Il ne prend pas de paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): REPEAT has 0 parameters, you wrote (number_of_written_parameters)
REPEAT est utilisé sans un LOOP précédente
ERROR LINE (line_number): REPEAT and no LOOP
Exécuter certaines lignes d'instructions jusqu'à ELSE ou END
IF: variable
Les instructions IF ne sont pas imbriquées (IF dans IF)
Cela prend exactement un paramètre
* variable - une variable, si la variable est différente de 0, exécute les instructions jusqu'à ELSE ou END (s'il n'y a pas d'ELSE)
Mauvais nombre de paramètres
ERROR LINE (line_number): IF has 1 parameters, you wrote (number_of_written_parameters)
Mauvais paramètre pour times
ERROR LINE (line_number): IF parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Le fichier se termine et il y a encore au moins un IF sans END
You have number_of_repeats IF without END
ELSE est une partie du IF
Il ne prend pas de paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): ELSE has 0 parameters, you wrote (number_of_written_parameters)
END est utilisé sans un IF précédent
ERROR LINE (line_number): ELSE and no IF
Termine un IF
Il ne prend pas de paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): END has 0 parameters, you wrote (number_of_written_parameters)
END est utilisé sans un IF précédent
ERROR LINE (line_number): END and no IF
Définir la valeur d'une variable
SET: variable value
Il faut exactement deux paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): SET has 2 parameters, you wrote (number_of_written_parameters)
Mauvais paramètre pour variable
ERROR LINE (line_number): SET parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Mauvais paramètre pour value
ERROR LINE (line_number): SET parameter 2 requires a number or a variable, you wrote (actual_written_parameter_value)
Ajouter une valeur à la valeur d'une variable
ADD: variable value
Il faut exactement deux paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): ADD has 2 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre pour variable
ERROR LINE (line_number): ADD parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Mauvais type de paramètre pour value
ERROR LINE (line_number): ADD parameter 2 requires a number or a variable, you wrote (actual_written_parameter_value)
Soustrayez une valeur de la valeur d'une variable
SUB: variable value
Il faut exactement deux paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): SUB has 2 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre pour variable
ERROR LINE (line_number): SUB parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Mauvais type de paramètre pour value
ERROR LINE (line_number): SUB parameter 2 requires a number or a variable, you wrote (actual_written_parameter_value)
Multipliez la valeur d'une variable par une valeur.
MUL: variable value
Il faut exactement deux paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): MUL has 2 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre pour variable
ERROR LINE (line_number): MUL parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Mauvais type de paramètre pour value
ERROR LINE (line_number): MUL parameter 2 requires a number or a variable, you wrote (actual_written_parameter_value)
Diviser la valeur d'une variable par une valeur
DIV: variable value
Il faut exactement deux paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): DIV has 2 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre variable
ERROR LINE (line_number): DIV parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Mauvais type de paramètre value
ERROR LINE (line_number): DIV parameter 2 requires a number or a variable, you wrote (actual_written_parameter_value)
Diviser la valeur d'une variable par une valeur (valeur entière)
IDIV: variable value
Il faut exactement deux paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): IDIV has 2 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre variable
ERROR LINE (line_number): IDIV parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Mauvais type de paramètre value
ERROR LINE (line_number): IDIV parameter 2 requires a number or a variable, you wrote (actual_written_parameter_value)
Le reste de la division d'une variable avec une valeur
MOD: variable value
Il faut exactement deux paramètres
Mauvais nombre de paramètres
ERROR LINE (line_number): MOD has 2 parameters, you wrote (number_of_written_parameters)
Mauvais type de paramètre variable
ERROR LINE (line_number): MOD parameter 1 requires a variable, you wrote (actual_written_parameter_value)
Mauvais type de paramètre value
ERROR LINE (line_number): MOD parameter 2 requires a number or a variable, you wrote (actual_written_parameter_value)
Pour un 0.2p supplémentaire, implémentez les imbrications pour LOOP, WHILE et IF.