Table of Contents

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

Exigences du devoir

Le but du devoir est d'écrire un interprète pour le langage Design . Le langage est utilisé pour dessiner des figures géométriques.

L'interprète reçoit 2 fichiers en tant que paramètres de la ligne de commande:

  1. un fichier d'entree, d'où il faut lire les instructions de design
  2. un fichier de sortie SVG, où il faut afficher les figures géométriques

S'il y a des erreurs dans le fichier d'entrée, l'interprète va afficher sur l'écran un message qui contient le numéro de la ligne et le texte d'erreur, mais sans arrêter le programme.

Exemple d'exécution du programme:

node main.js design.dsn canvas.svg

Cela va exécuter le fichier design.dsn et va dessiner les figures indiquées par les instructions dans le fichier canvas.svg.

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

Example erreur

Pour le fichier design.dsn suivant :

& Move
POSITION: 200, 200
COMMAND_WITH_ERROR  

L'interpreteur devra déplacer la position du crayon et ensuite afficher:

ERROR LINE (2): Unknown statement (COMMAND_WITH_ERROR)

Valeurs initiales

Règles

  1. Le programme doit être écrit en TypeScript, pas JavaScript. Toutes les variables doivent avoir le type défini (-0.5p)
  2. Le code source doit être indenté (-0.1p)
  3. Vous devez écrire un fichier nommé README et expliquer la solution choisie pour le devoir (-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. Met à jour les coordonnées du stylo.

Syntaxe
LINE: x y location
LINE: l a polar
Paramètres

Elle prend exactement 3 paramètres

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 3 requires one of (location, 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 met pas à jour la position du stylo.

Syntaxe
CIRCLE: x y r
Paramètres

Elle prend exactement 3 paramètres

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

Dessine une ellipse Elle ne met pas à jour la position du stylo.

Syntaxe
ELLIPSE: x y r1 r2
Paramètres

Elle prend exactement 4 paramètres

Erreurs

Nombre de paramètres erroné:

ERROR LINE (line_number):ELLIPSE has 4 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

Dessine un rectangle Elle ne met pas à jour la position du stylo.

Syntaxe
RECTANGLE: x1 y1 x2 y2
Paramètres

Elle prend exactement 4 paramètres

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

Met à jour la couleur du stylo ou de remplissage.

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

Elle prend exactement 4 paramètres

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

Elle prend exactement 1 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:

ERROR LINE (line_number):LOOP with no 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

Elle prend exactement 1 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:

ERROR LINE (line_number):WHILE with no REPEAT

REPEAT

Termine un LOOP ou un WHILE.

Paramètres

Elle 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 1 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

Elle 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

Elle 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éfinit la valeur d'une variable

SET: variable value
Paramètres

Elle prend exactement 2 paramètres

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

Ajoute une valeur à la valeur d'une variable

ADD: variable value
Paramètres

Elle prend exactement 2 paramètres

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

Soustrait une valeur de la valeur d'une variable

SUB: variable value
Paramètres

Elle prend exactement 2 paramètres

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

Multiplie la valeur d'une variable par une valeur.

MUL: variable value
Paramètres

Elle prend exactement 2 paramètres

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

Divise la valeur d'une variable par une valeur

DIV: variable value
Paramètres

Elle prend exactement 2 paramètres

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

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

IDIV: variable value
Paramètres

Elle prend exactement 2 paramètres

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

Elle prend exactement 2 paramètres

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.