This is an old revision of the document!


Devoir 2 - Langage de Dessin

Information

Date limite: 4 Avril, 23:55
Points: 1 point de la note finale
Lien: Devoir 2 - Langage de Design
Rendre en retard: 1 point / jour (maximum 2 jours)

Objectifs

Le but de ce travail est de vous familiariser avec les concepts suivants:

  1. développement de base de TypeScript
  2. utilisation de structures de données dans TypeScript
  3. utilisation des paramètres de la ligne de commande
  4. lecture de données à partir de fichiers
  5. division et traitement de chaînes

Ce que vous avez à faire

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:

  • le fichier avec les instructions
  • le fichier de sortie svg

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.

Les fins de ligne dans le fichier de commandes sont les uns du Linux, ce qui signifie juste \ n .

Example

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

Valeurs initiales

  • La position initiale est 0, 0.
  • La couleur initiale du stylo est noire.
  • La couleur de remplissage initiale est blanche.
  • La largeur du stylo est 1.

Règles

  1. Les fichiers doivent avoir “use strict”
  2. Les fichiers doivent passer jshint (avec node: true, esnext: true)
  3. Le code source doit être indenté (-0.1p)
  4. Vous devez écrire un fichier nommé Readme et expliquer comment vous avez écrit les devoirs (-0.1p)

Copiage

Le devoir est individuel. Toute tentative de copie entraînera 0p pour les devoirs. Système anti-copie automatisé sera utilisé.

Questions

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.

NE POSTEZ AUCUN CODE . Cette action est considéré comme tentative de tricher et alors vous obtiendrez 0p pour le devoir.

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.

Langage de Dessin

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.

Commentaires

Les commentaires sont précédés par &.

& Sur cette ligne il y a un commentaire
INSTRUCTION: p1 p2
INSTRUCTION: p1 p2

Variables

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 ).

Format des instructions

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).

Instructions

POSITION

Déplace le stylo dans une position, sans rien dessiner.

Les paramètres sont x et y.

Syntaxe
POSITION: 150 150
POSITION: %here %there
& %here et %there sont des variables qui ont été assignées précédemment
Erreurs

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)

LINE

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.

Syntaxe
LINE: position x y
LINE: polar l a
Parameters

Cela prend exactement trois paramètres

  • type - soit position soit polar
  • x - si type est position, la coordonnée x de la nouvelle position
  • y - si type est position, la coordonnée y de la nouvelle position
  • l - si type est polar, la longueur de la ligne
  • a - si type est polar, l'angle (du cercle trigonométrique) en degrés
Erreurs

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)

CIRCLE

Dessine un cercle

Cela ne déplace pas la position actuelle.

Syntaxe
CIRCLE: x y r
Paramètres

Il faut exactement trois paramètres

  • x - la coordonnée x pour le centre
  • y - la coordonnée y pour le centre
  • r - le rayon
Erreurs

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)

ELLIPSE

Dessiner une ellipse

Cela ne déplace pas la position actuelle.

Syntaxe
ELLIPSE: x y r1 r2
Paramètres

Il faut exactement quatre paramètres

  • x - la coordonnée x pour le centre
  • y - la coordonnée y pour le centre
  • r1 - le rayon horizontal
  • r2 - le rayon vertical
Erreurs

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)

RECTANGLE

Dessiner un rectangle

Cela ne déplace pas la position actuelle.

Syntaxe
RECTANGLE: x1 y1 x2 y2
Paramètres

Il faut exactement quatre paramètres

  • x1 - la coordonnée x du coin supérieur gauche
  • y1 - la coordonnée y du coin supérieur gauche
  • x2 - la coordonnée x du coin inférieur droit
  • y2 - la coordonnée y du coin inférieur droit
Erreurs

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)

COLOR

Sélectionne la couleur du dessin.

La couleur initiale du stylo est noir. La couleur de remplissage initiale est blanc.

Syntaxe
COLOR: pen r g b
COLOR: fill r g b
Paramètres

Il faut exactement quatre paramètres

  • type - soit pen (la couleur de la ligne) fill (la couleur à l'intérieur)
  • r - le composant rouge de la couleur
  • g - le composant vert de la couleur
  • b - le composant bleu de la couleur

Les valeurs sont comprises entre 0 et 255.

Errors

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)

LOOP

Répète certaines lignes de déclarations jusqu'à REPEAT

LOOP: times

Les instructions LOOP ne sont pas imbriquées (LOOP dans LOOP)

Paramètres

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

Erreurs

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

WHILE

Répète certaines lignes de déclarations jusqu'à REPEAT

WHILE: variable

Les instructions WHILE ne sont pas imbriquées (WHILE dans WHILE)

Paramètres

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

Erreurs

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

REPEAT

Termine un LOOP ou un WHILE

Paramètres

Il ne prend pas de paramètres

Erreurs

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

IF

Exécuter certaines lignes d'instructions jusqu'à ELSE ou END

IF: variable

Les instructions IF ne sont pas imbriquées (IF dans IF)

Paramètres

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)

Errors

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

ELSE est une partie du IF

Paramètres

Il ne prend pas de paramètres

Erreurs

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

END

Termine un IF

Paramètres

Il ne prend pas de paramètres

Erreurs

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

SET

Définir la valeur d'une variable

SET: variable value
Paramètres

Il faut exactement deux paramètres

  • variable - une variable
  • value - la valeur, peut être un nombre ou une autre variable
Erreurs

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)

ADD

Ajouter une valeur à la valeur d'une variable

ADD: variable value
Paramètres

Il faut exactement deux paramètres

  • variable - une variable
  • value - la valeur à ajouter, peut être un nombre ou une autre variable
Erreurs

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)

SUB

Soustrayez une valeur de la valeur d'une variable

SUB: variable value
Paramètres

Il faut exactement deux paramètres

  • variable - une variable
  • value - la valeur à soustraire, peut être un nombre ou une autre variable
Erreurs

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)

MUL

Multipliez la valeur d'une variable par une valeur.

MUL: variable value
Paramètres

Il faut exactement deux paramètres

  • variable - une variable
  • value - la valeur avec laquelle on multiplie, peut être un nombre ou une autre variable
Erreurs

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)

DIV

Diviser la valeur d'une variable par une valeur

DIV: variable value
Paramètres

Il faut exactement deux paramètres

  • variable - une variable
  • value - la valeur avec laquelle on divise la valeur de la variable, peut être un nombre ou une autre variable
Erreurs

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)

IDIV

Diviser la valeur d'une variable par une valeur (valeur entière)

IDIV: variable value
Paramètres

Il faut exactement deux paramètres

  • variable - une variable
  • value - la valeur avec laquelle on divise la valeur de la variable, peut être un nombre ou une autre variable
Erreurs

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)

MOD

Le reste de la division d'une variable avec une valeur

MOD: variable value
Parameters

Il faut exactement deux paramètres

  • variable - une variable
  • value - la valeur avec laquelle on divise la valeur de la variable, peut être un nombre ou une autre variable
Erreurs

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)

Bonus

Pour un 0.2p supplémentaire, implémentez les imbrications pour LOOP, WHILE et IF.

Le bonus ne sera attribué que si tous les autres tests réussissent.

alf/teme/tema2.1616355817.txt.gz · Last modified: 2021/03/21 21:43 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