This is an old revision of the document!


Devoir 2 - Langage de Design

Information

Date limite: 4 Avril, 23:55
Points: 1 point de la note finale
Lien: Devoir 2
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éteur pour le langage Design . 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 ceux de 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 passer jshint (avec node: true, esnext: true)
  2. Le code source doit être indenté (-0.1p)
  3. 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 tricher entraînera 0p pour les devoirs. On va utiliser un systeme automatisé pour détecter les devoirs copiés.

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 stylo 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 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 2 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. Celle-ci sera la nouvelle position du stylo.

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

Elle prend exactement trois paramètres

  • type - soit position soit polar
  • x - si type est location, la coordonnée x de la nouvelle position
  • y - si type est location, 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

Nombre de paramètres erroné:

ERROR LINE (line_number):LINE has 3 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné pour type:

ERROR LINE (line_number): LINE parameter 1 requires one of (position, polar), you wrote (actual_written_parameter_value)

Type de paramètre erroné:

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

Elle 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

Nombre de paramètres erroné:

ERROR LINE (line_number): CIRCLE has 3 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné:

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

Elle 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

Nombre de paramètres erroné:

ERROR LINE (line_number): ELLIPSE has 3 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné:

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

Elle 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

Nombre de paramètres erroné:

ERROR LINE (line_number): RECTANGLE has 4 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné:

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

Nombre de paramètres erroné:

ERROR LINE (line_number):COLOR has 4 parameters, you wrote (number_of_written_parameters)

Type de paramètres erroné pour type

ERROR LINE (line_number): COLOR parameter 1 requires one of (pen, fill), you wrote (actual_written_parameter_value)

Type de paramètre erroné:

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

Nombre de paramètres erroné:

ERROR LINE (line_number): LOOP has 1 parameters, you wrote (number_of_written_parameters)

Paramètre erroné 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

Nombre de paramètres erroné:

ERROR LINE (line_number): WHILE has 1 parameters, you wrote (number_of_written_parameters)

Paramètre erroné pour la 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

Nombre de paramètres erroné:

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

Elle 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

Nombre de paramètres erroné:

ERROR LINE (line_number): IF has 1 parameters, you wrote (number_of_written_parameters)

Paramètre erroné 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

Nombre de paramètres erroné:

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

Nombre de paramètres erroné:

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

Nombre de paramètres erroné:

ERROR LINE (line_number): SET has 2 parameters, you wrote (number_of_written_parameters)

Paramètre erroné pour variable

ERROR LINE (line_number): SET parameter 1 requires a variable, you wrote (actual_written_parameter_value)

Paramètre erroné 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

Nombre de paramètres erroné:

ERROR LINE (line_number): ADD has 2 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné pour la variable

ERROR LINE (line_number): ADD parameter 1 requires a variable, you wrote (actual_written_parameter_value)

Type de paramètre erroné 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

Nombre de paramètres erroné:

ERROR LINE (line_number): SUB has 2 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné pour variable

ERROR LINE (line_number): SUB parameter 1 requires a variable, you wrote (actual_written_parameter_value)

Type de paramètre erroné 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

Nombre de paramètres erroné

ERROR LINE (line_number): MUL has 2 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné pour variable

ERROR LINE (line_number): MUL parameter 1 requires a variable, you wrote (actual_written_parameter_value)

Type de paramètre erroné 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

Nombre de paramètres erroné

ERROR LINE (line_number): DIV has 2 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné pour variable

ERROR LINE (line_number): DIV parameter 1 requires a variable, you wrote (actual_written_parameter_value)

Type de paramètre erroné pour 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

Nombre de paramètres erroné

ERROR LINE (line_number): IDIV has 2 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné pour variable

ERROR LINE (line_number): IDIV parameter 1 requires a variable, you wrote (actual_written_parameter_value)

Type de paramètre erroné pour 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

Nombre de paramètres erroné:

ERROR LINE (line_number): MOD has 2 parameters, you wrote (number_of_written_parameters)

Type de paramètre erroné pour variable

ERROR LINE (line_number): MOD parameter 1 requires a variable, you wrote (actual_written_parameter_value)

Type de paramètre erroné pour 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.1616995850.txt.gz · Last modified: 2021/03/29 08:30 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