Notes de cours. Vocabulaire de LSP

Documents pareils
Algorithmique et Programmation, IMA

Cours d Algorithmique et de Langage C v 3.0


Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Introduction à l algorithmique et à la programmation M1102 CM n 3

Cours d Informatique

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Bases de programmation. Cours 5. Structurer les données

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Rappels Entrées -Sorties

TP 1. Prise en main du langage Python

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

STAGE IREM 0- Premiers pas en Python

Traduction des Langages : Le Compilateur Micro Java

Chap III : Les tableaux

SUPPORT DE COURS. Langage C

Cours de Programmation 2

V- Manipulations de nombres en binaire

UE Programmation Impérative Licence 2ème Année

Organigramme / Algorigramme Dossier élève 1 SI

Notions fondamentales du langage C# Version 1.0

Initiation à la Programmation en Logique avec SISCtus Prolog

ALGORITHMIQUE ET PROGRAMMATION En C

Algorithmique et programmation : les bases (VBA) Corrigé

Les structures. Chapitre 3

Compilation (INF 564)

Initiation à la programmation en Python

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Représentation d un entier en base b

Programmation en langage C

Informatique Générale

Le langage C. Introduction, guide de reference

Logiciel de Base. I. Représentation des nombres

Plan du cours Cours théoriques. 29 septembre 2014

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

OCL - Object Constraint Language

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Création et Gestion des tables

La mémoire. Un ordinateur. L'octet. Le bit

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Conventions d écriture et outils de mise au point

COMPTABILITE SAGE LIGNE 30

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Claude Delannoy. 3 e édition C++

Programmation C++ (débutant)/instructions for, while et do...while

Les chaînes de caractères

Algèbre binaire et Circuits logiques ( )

INF 321 : mémento de la syntaxe de Java

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

ACCÈS SÉMANTIQUE AUX BASES DE DONNÉES DOCUMENTAIRES

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Programmation Classique en langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

2 Comment fonctionne un ordinateur, dans les grandes lignes

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

eduscol Ressources pour la voie professionnelle Français Ressources pour les classes préparatoires au baccalauréat professionnel

Calcul Formel et Numérique, Partie I

1. Structure d'un programme FORTRAN 95

Architecture des Systèmes d Information Architecture des Systèmes d Information

Le prototype de la fonction main()

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

L exclusion mutuelle distribuée

Adama MBODJI MBODJ.SYSTEM

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Chapitre 10 Arithmétique réelle

TP : Gestion d une image au format PGM

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

4. Les structures de données statiques

Créer le schéma relationnel d une base de données ACCESS

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Manuel de référence du langage Exemples Les aventures de Docteur R.

EXCEL TUTORIEL 2012/2013

Machines virtuelles fonctionnelles (suite) Compilation ML Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Analyse de sécurité de logiciels système par typage statique

INITIATION A LA PROGRAMMATION

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Algorithmes et programmation en Pascal. Cours

COMPARAISONDESLANGAGESC, C++, JAVA ET

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Cours Informatique Master STEP

Transcription:

Notes de cours GEI 443 : ORGANISATION DES LANGAGES ET COMPILATION Chapitre 5 Introduction au langage LSP 1 Vocabulaire de LSP Vocabulaire = ensemble des terminaux acceptés Vocabulaire vérifié lors de l analyse lexicale Terminaux (ou unités lexicales) acceptés sont (rappel, voir chapitre 2 pages 40-43) : - identificateur (id) constitué d une première lettre suivie de lettres et de chiffres (ici le _ considéré comme une lettre) - nombre entier (nb) constitué de plusieurs chiffres - chaine (ch) est une séquence de caractères placée entre guillemets - booléen (bo) peut être un des deux mots clé vrai ou faux - opérateurs - non (unaires) - * + / & =!= < <= > >= et ou.. (binaires) - affectation := - mots clé const var proc entier chaine bool lect ecrit si alors sinon finsi tantque faire fintq finproc - autres ( ) [ ] % : ;, 2 1

Syntaxe du langage LSP Syntaxe de LSP définie par une grammaire hors-contexte Grammaire : G = (Vt, Vn, S, P) Vt = { id, nb, ch, bo, -, *, +, /, &, =,!=, <, <=, >, >=, non, et, ou,.., :=, (, ), [, ], %, :, ;,,, const, var, proc, entier, chaine, bool, lect, ecrit, si, alors, sinon, finsi, tantque, faire, fintq, finproc } Vn = { Programme, Decl, Proc, Seq, Val, Type, Expr, Instr, Oper, Facteur } S = Programme Parties de LSP qui dépendent du contexte étudiées lors de l analyse sémantique Par la suite, nous utiliserons les métasymboles suivants : α β choix entre α et β [α ] 0 ou 1 occurrence de α {α } 0, 1 ou plusieurs occurrences de α 3 P = { Programme { Decl Proc } Seq FDF Proc proc id [ (id : Type {, id : Type } ) ] [ : Type ] RET { Decl } Seq finproc id RET Decl const id : Type := Val {, id : Type := Val } ; RET Val var id : Type [ := Val ] {, id : Type [ := Val ] } ; RET bo nb ch Type entier chaine bool Seq [ RET ] { Instr [ RET ] } Instr id ( [ Expr {, Expr } ] ) ; id := Expr ; lect id {, id } ; ecrit Expr {, Expr } ; si Expr alors Seq [ sinon Seq ] finsi RET tantque Expr faire Seq fintq RET Expr Expr Oper Expr Facteur Facteur id id ( [ Expr {, Expr } ] ) id [ Expr [.. Expr ] ] - Facteur non Facteur ( Expr ) Val Oper =!= < <= >= > + - * / & ou et } 4 2

Règle de production : Programme { Decl Proc } Seq FDF Un programme est constitué de : 1. Une suite de composants Decl et Proc, où : chaque composant peut être : - une suite de déclarations de constantes ou - une suite de déclarations de variables ou - une déclaration de procédure (Proc) Decl 2. Une suite Seq d instructions 3. Le caractère Fin de fichier (FDF) 5 Règles de production : Decl Type Val const id : Type := Val {, id : Type := Val } ; RET entier chaine bool bo nb ch Dans une déclaration de constantes, on a dans l ordre : - le mot-clé const - une séquence de composants séparés par des virgules - un point-virgule suivi d un retour à la ligne Chaque composant (qui représente une déclaration de constante) est constitué de : - le nom de la constante - le symbole : - le type de la constante qui peut être entier, chaine ou bool - le symbole d affectation := - la valeur (booléen ou entier ou chaîne) que l on affecte à la constante Exemple : Déclaration de trois constantes const accel : entier := 12, message : chaine := Bonjour\n, correct : bool := vrai; 6 3

Règle de production : Decl var id : Type [ := Val ] {, id : Type [ := Val ] } ; RET Dans une déclaration de variables, on a dans l ordre : - le mot-clé var - une séquence de composants séparés par des virgules - un point-virgule suivi d un retour à la ligne Chaque composant, qui représente une déclaration de variable, est constitué de : - le nom de la variable - le symbole : - le type de la variable, qui peut être entier, chaine ou bool - si la variable est initialisée lors de sa déclaration - le symbole := - la valeur que l on affecte à la variable Exemple : Déclaration de trois variables var vit : entier := 0, message : chaine, termine : bool; 7 Règles de production : Proc proc id [ (id : Type {, id : Type } ) ] [ : Type ] RET { Decl } Seq finproc id RET Dorénavant, procédure signifiera procédure ou fonction Dans une déclaration (et définition) de procédure, on a dans l ordre : - le mot-clé proc suivi du nom de la procédure - si la procédure possède des arguments - parenthèse ouverte - séquence de déclarations d arguments séparées par des virgules - parenthèse fermée - s il s agit d une fonction (et non d une procédure), alors on a ensuite - le symbole : - le type de la valeur retournée (Type) - un retour à la ligne (RET) - une suite (pouvant être vide) de déclarations de variables et de constantes (locales) - une suite (pouvant être vide) d instructions (Seq, voir page 4) - le mot clé finproc suivi du nom de la procédure et d un retour à la ligne 8 4

Règle de production définissant une procédure (suite) Une déclaration d argument est constituée de : - le nom de l argument - le symbole : - le type de l argument Lorsqu il s agit d une fonction alors : - une variable locale appelée resultat est automatiquement (et implicitement) définie comme ayant le type de la valeur retournée par la fonction - la fonction retourne la valeur de la variable resultat - on n a pas le droit de déclarer une variable ou constante locale s appelant resultat 9 Exemples de définition de procédure Exemple 1 : proc addition ( x : entier, y : entier ) : entier resultat := x + y ; finproc addition Exemple 2 : proc affiche ( message : chaine ) const Max : entier := 50; si (long(message) <= Max) alors ecrit message \n ; sinon ecrit Message trop long \n ; finsi finproc affiche 10 5

Portée des variables Variables et constantes déclarées à l extérieur d une procédure ont portée globale. Elles peuvent être utilisées dans tout le programme. Variables et constantes déclarées à l intérieur d une procédure ont portée locale, c-à-d. connues uniquement à l intérieur de la procédure où elles ont été déclarées. Valeur affectée à une variable est perdue lorsqu on sort de la procédure. Variable ou constante locale à procédure donnée peut avoir même nom N que : - variable ou constante locale à une autre procédure - variable ou constante globale Lorsqu on est à l intérieur d une procédure où N a été (localement) déclaré, alors N désigne la variable ou constante locale à cette procédure Lorsqu on est à l extérieur de toute procédure ou à l intérieur d une procédure où N n a pas été déclaré, alors N désigne une variable globale 11 Règle de production définissant le symbole non-terminal Expr Corps procédures et programme principal constitués de séquences d instructions. Avant de présenter les instructions, il est nécessaire de présenter les expressions définies par le symbole Expr Une expression peut être (règle Expr Expr Oper Expr Facteur ) : - un facteur ou - deux expressions séparées par un opérateur Il est donc nécessaire de présenter les facteurs 12 6

Règle de production définissant le symbole non-terminal Facteur Un facteur peut être (voir règles Facteur..., page 4) : - un identificateur qui représente le nom d une variable ou constante (id) - un identificateur suivi d une séquence d expressions séparées par des virgules. La séquence est mise entre parenthèses (obligatoires même si séquence vide) L identificateur représente un nom de fonction (et non de procédure) Les expressions entre parenthèses représentent les arguments de la fonction Ce facteur représente la valeur retournée par un appel de fonction - un identificateur suivi d une séquence d expressions séparées par le symbole.. Séquence constituée de un ou deux éléments est mise entre crochets L identificateur représente un nom de variable de type chaîne de caractères Les expressions entre crochets représentent des positions dans la chaine Ce facteur représente une sous-chaîne : - de la chaîne représentée par l identificateur - dont le début et la fin sont définis par les deux positions Lorsqu une seule position est définie, il s agit d une sous-chaîne de longueur 1 Exemples : S[3] S[2.. 5] S[2.. x+3] 13 Règle de production définissant symbole non-terminal Facteur (suite) Un facteur peut aussi être : - un facteur précédé du symbole - (correct lorsque facteur représente un entier) - un facteur précédé du symbole non (correct lorsque facteur représente un booléen) - une expression entre parenthèses - une valeur booléenne (un des deux mots vrai et faux) - une valeur entière - une chaîne de caractères entre guillemets 14 7

Règle de production définissant un opérateur Les opérateurs (qui sont utilisés dans les expressions) sont les suivants : = égalité (a = b)!= inégalité (a!= b) < inférieur (a < b) <= inférieur ou égal (a <= b) >= supérieur ou égal (a >= b) > supérieur (a > b) + addition (a + b) - soustraction (a - b) * multiplication (a * b) / division (a / b) & modulo (a & b) ou et Opérations booléennes 15 Définition des instructions Appel de procédure: Instr id ( [ Expr {, Expr } ] ) ; - identificateur qui représente nom de procédure (et pas d une fonction) - parenthèse ouverte - séquence d expressions séparées par des virgules ces expressions représentent les arguments de la procédure la séquence peut être vide (mais les parenthèses sont obligatoires) - parenthèse fermée - point-virgule Remarque : - même syntaxe que pour l appel de fonction (avec un point-virgule en plus) - appel de fonction est une expression, appel de procédure est une instruction Affectation: Instr id := Expr ; - identificateur qui représente variable à laquelle on affecte une valeur - symbole := - expression dont la valeur est affectée à la variable 16 8

Définition des instructions (suite) Lecture de l entrée standard : Instr lect id {, id } ; - mot clé lect - séquence d identificateurs séparés par des virgules - séquence contient au moins un élément - identificateurs représentent variables auxquelles on veut affecter des valeurs qui sont récupérées à partir de l entrée standard - point-virgule Écriture sur la sortie standard : Instr ecrit Expr {, Expr } ; - mot clé ecrit - séquence d expressions séparées par des virgules - séquence contient au moins un élément - les valeurs des expressions sont envoyées sur la sortie standard - point-virgule Remarque : un identificateur est un cas particulier d expression 17 Définition des instructions (suite) Condition : Instr si Expr alors Seq [ sinon Seq ] finsi RET - mot clé si - expression ayant une valeur booléenne - mot clé alors - séquence d instructions (exécutées lorsque l expression booléenne est vraie) - optionnellement - mot clé sinon - séquence d instructions (exécutées lorsque l expression booléenne est fausse) - mot clé finsi suivi d un retour à la ligne Répétition : Instr tantque Expr faire Seq fintq RET - mot clé tantque - expression ayant une valeur booléenne - mot clé faire - séquence d instructions (exécutées tant que l expression booléenne est vraie) - mot clé fintq suivi d un retour à la ligne 18 9

Exemple de programme var FoisUtilisee; % variable globale incrémentée à chaque exécution de Superpose % % Fonction Superpose retourne position d une sous-chaîne dans une chaîne Si SousCh est une sous-chaîne de Ch alors la fonction retourne l entier i tel que SousCh[k] = Ch[k+i] pour tout k tel que 0 <= k < m, m = longueur de SousCh % proc Superpose(SousCh : chaine, Ch : chaine) : entier var P : entier := 1; % variable locale % resultat := 0; tantque ((P+long(SousCh) <= long(ch)) et (resultat = 0)) faire si (Ch[P.. P + long(sousch) - 1] = SousCh) alors resultat := P; finsi P := P+1; fintq FoisUtilisée := FoisUtilisée + 1; finproc Superpose 19 Exemple de programme (suite) % Programme principal % var C : chaine, S : chaine, R : entier; FoisUtilisee := 0; ecrit Entrer une chaine : ; lect C; tantque (C!= ) faire % tant que chaine non vide % ecrit Entrer une sous-chaine : ; lect S; R := Superpose(S,C); si (R = 0) alors ecrit S, n est pas dans, C,.\n ; sinon ecrit Superposition en, R,.\n ; finsi ecrit Entrer une autre chaine : ; lect C; fintq ecrit Nombre de superpositions effectué est, FoisUtilisee,.\n ; 20 10

Quelques considérations sémantiques Tableau ci-dessous représente compatibilités entre les types et les opérateurs Type Opérateurs permis entier / & * + - =!= < <= > >= chaine + =!= < <= > >= bool non et ou =!= 21 Quelques considérations sémantiques (suite) Les trois types autorisés sont : - entier valeurs signées codées en complément à 2 sur 4 octets donc la valeur N d un entier est telle que : -231 <= N <= 2 31-1 - bool valeurs de ce type peuvent être vrai ou faux - chaine valeurs de ce type peuvent être des chaînes de caractères entre guillemets chaque caractère est codé en ASCII (sur un octet) les codes ASCII supportés sont : 32 à 127 \n (retour à la ligne) et \t (tabulation) Soit C une chaîne de caractères de longueur m C[i] désigne le (i)ème caractère (C[1] est le premier caratère) C[i.. j] désigne la sous-chaîne commençant en C[i] et finissant en C[j] C[i.. i] = C[i] C[1.. m] = C 22 11

Quelques considérations sémantiques (suite) Affectation : valeur affectée à une variable ou constante doit être de même type que celle-ci Exemples : Déclarations : const a : entier := 23; var b : bool := vrai, c : chaine := bonjour\n ; var u : bool, v : chaine, w : entier; Instructions : u := (non b) ou u; v := v + c; w := a + 3; 23 Quelques considérations sémantiques (suite) Lecture identificateurs qui suivent le mot clé lect peuvent être de type entier ou chaine Écriture expressions qui suivent le mot clé ecrit peuvent être de type entier ou chaine Variable resultat - implicitement déclarée dans une fonction - contient la valeur retournée par la fonction - on ne peut donc pas déclarer une variable resultat dans une fonction Procédure et fonction débute par mot clé proc suivi du nom de la procédure se termine par mot clé finproc suivi du nom de la procédure - on ne peut donc pas déclarer une variable resultat dans une fonction Structures de condition et de répétition Une expression qui suit un des deux mots clé si et tantque doit être booléenne 24 12