Apprentissage de Cup

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

Cours 1 : Qu est-ce que la programmation?

TP1 : Initiation à Java et Eclipse

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Chapitre I Notions de base et outils de travail

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Le prototype de la fonction main()

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Algorithmique et Programmation, IMA

as Architecture des Systèmes d Information

Traduction des Langages : Le Compilateur Micro Java

Cours 1 : La compilation

TP 1. Prise en main du langage Python

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

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

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

Cours 1: Java et les objets

Remote Method Invocation (RMI)

RMI le langage Java XII-1 JMF

Cours d initiation à la programmation en C++ Johann Cuenin

Création du projet : 1 sur 13

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

TP, première séquence d exercices.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Représentation d un entier en base b

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Projet de Veille Technologique

Présentation du langage et premières fonctions

Télécom Nancy Année

Évaluation et implémentation des langages

TP1. Outils Java Eléments de correction

Programmer en JAVA. par Tama

TP3 : Creation de tables 1 seance

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

Programmation système I Les entrées/sorties

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Bases Java - Eclipse / Netbeans

Les structures. Chapitre 3

Manuel d'installation de GESLAB Client Lourd

Programmation Orientée Objet

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Programmation C. Apprendre à développer des programmes simples dans le langage C

ALGORITHMIQUE ET PROGRAMMATION En C

INFO-F-404 : Techniques avancées de systèmes d exploitation

ADAPT: un modèle de transcodage des nombres. Une application des systèmes de production au développement

TP1 : Initiation à Java et Eclipse

Utilisation d objets : String et ArrayList

Cours Langage C/C++ Programmation modulaire

Tp 1 correction. Structures de données (IF2)

Une introduction à Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

ACTIVITÉ DE PROGRAMMATION

STAGE IREM 0- Premiers pas en Python

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Cours Informatique Master STEP

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Introduction à EasyLanguage

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Propagation sur réseau statique et dynamique

SQL Parser XML Xquery : Approche de détection des injections SQL

Compte-rendu de projet de Système de gestion de base de données

INITIATION AU LANGAGE JAVA

EVALUATION Nombres CM1

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Corrigés des premiers exercices sur les classes

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

1. Structure d'un programme FORTRAN 95

Les structures de données. Rajae El Ouazzani

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

PROGRAMMATION PAR OBJETS

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Initiation à la programmation en Python

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Générer du code à partir d une description de haut niveau

Compilation. Algorithmes d'analyse syntaxique

Java Licence Professionnelle CISII,

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

TD/TP 1 Introduction au SDK d Android

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Cours d Algorithmique et de Langage C v 3.0

MODIFICATIONS DES PRINCIPES DIRECTEURS CONCERNANT LA RÉDACTION DES DÉFINITIONS RELATIVES AU CLASSEMENT

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

1 TD 2 : Construction d'une chier Acrobat et envoi par

Remise à niveau d un programme JAVA du domaine public

Java DataBaseConnectivity

Conception de circuits numériques et architecture des ordinateurs

Les chaînes de caractères

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

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Recherche dans un tableau

Interpréteur d algèbre relationnelle


Transcription:

Université du Littoral M1 Apprentissage de Cup 1 Introduction Le but de cet TP est de vous donner les bases nécessaires an de pouvoir écrire votre analyseur syntaxique en Java. Pour Java, nous utiliserons le couple JFlex (http://jflex.de/) et Cup (http://www2.cs.tum.edu/projects/cup/). 1.1 Analyseur syntaxique Cup Cup est programmé en Java. La dernière version est (en 2009) la version 0.11a. L'utilisation de cette version se fait de la façon suivante : java -jar java-cup-11a.jar moncup.cup Si la version est plus ancienne, il est possible que vous deviez utiliser la commande : cup moncup.cup (moncup.cup étant le chier contenant la spécication Cup). A partir d'un chier d'entrée respectant le format spécié ci-dessous, Cup génère deux chiers : un chier parser.java contenant la classe permettant de parser par la suite, et un chier sym.java contenant les types des objets utilisé (symboles). 1.2 Format d'une spécication Cup Ce chier de spécication se compose de cinq parties : 1. La première partie est la spécication optionnelle du package auquel appartiendront les chiers parser.java et sym.java générés ainsi que les importations éventuelles d'autres packages. 2. La seconde partie, également optionnelle, contient des déclarations de code Java qui se retrouveront dans le chier parser.java généré. 3. La troisième partie consiste en la déclaration des terminaux et des non terminaux de la grammaire avec la syntaxe suivante : terminal nom1, nom2,...; terminal nom_class nom1, nom2,...; non terminal nom1, nom2,...; non terminal nom_class nom1, nom2,...; nom_class est un nom de classe JAVA qui correspond aux attributs associés aux symboles de la grammaire : 1

dans le cas des terminaux, c'est le type des objets associés aux unités lexicales et retournés par l'analyseur lexical. dans le cas des non terminaux, c'est le type des objets retournés par les actions sémantiques d'une règle dont le membre gauche est un des non terminaux qui suit nom_class dans la déclaration. Par exemple, pour compter les occurrences de a dans un mot terminal a,b; non-terminal Integer S; 4. La quatrième partie est la déclaration optionnelle des diérentes priorités des opérateurs ainsi que leur associativité. 5. La cinquième partie est la déclaration des règles de la grammaire ainsi que des actions sémantiques associées à ces règles. Elle débute par une déclaration optionnelle de l'axiome start with nonterminal_name; Si cette déclaration est omise, alors le membre gauche de la première règle de production rencontrée sera considéré comme l'axiome. Viennent ensuite les règles de production qui sont de la forme suivante : nonterminal_name :: = name1 name2... namek {: action semantique :}; où name est un symbole de terminal ou de non terminal déclaré dans la troisième partie. Dans le cas de plusieurs règles ayant le même membre gauche, on utilise pour séparer les diérentes alternatives. nonterminal_name :: = name1 name2... namek {: action semantique :} name1' name2'... namek' {: action semantique :}; La partie action sémantique est simplement du code JAVA. Les analyseurs syntaxique et lexical doivent être d'accord sur les valeurs associées à chaque élément lexical (terminal). Quand l'analyseur lexical reconnaît un token, il doit communiquer cet élément à l'analyseur syntaxique. Cette communication est réalisée par l'intermédiaire de la classe Symbol dont voici quelques uns des constructeurs : public Symbol(int sym_id) public Symbol (int sym_id, int value) public Symbol(int sym_id, Object o) Les valeurs communiquées à l'analyseur syntaxique sont contenues dans le chier sym.java généré par Cup. 2

2 Exercices Nous allons dans cet exercice vérier syntaxiquement qu'une expression arithmétique est correctement écrite. Nous allons procéder en deux étapes : dans une première partie, nous allons utiliser JFlex seul an de découper le ot de données en éléments lexicaux, puis dans une deuxième étape, nous allons utiliser le couple Cup et JFlex an de vérier au niveau syntaxique que l'entrée est correcte. La grammaire que nous allons utiliser est la suivante : E : := E + T ; E : := E - T ; E : := T ; T : := T * F ; T : := F ; F : := (E) ; F : := ; Cette grammaire doit reconnaître par exemple des expressions arithmétiques comme : 3 + 2 3 (8 4) 3

Exercice n o 1 Analyse lexicale En utilisant JFlex seul, décrire les spécications des diérents éléments lexicaux. Vérier que le résultat attendu pour une expression arithmétique de la forme 3 (8 4) soit : STAR PO MIN PF correspondant à l'élément lexical nombre entier, STAR au symbole de multiplication, PO à la parenthèse ouvrante, etc... Exercice n o 2 Analyse lexicale et syntaxique Nous allons maintenant utiliser de concert le couple Cup et JFlex. Le fonctionnement est un peu plus lourd, vous devez respecter la séquence suivante : 1. commencer par créer le chier de grammaire Cup ; 2. compiler le chier Cup : java -jar java-cup-11a.jar grammaire.cup ou cup grammaire.cup 3. deux chiers sont produits : sym.java représentant les diérents terminaux à utiliser avec JFlex et parser.java qui est l'analyseur syntaxique 4. reprendre les diérentes valeurs fournies par sym.java pour les incorporer dans le chier JFlex. 5. compiler sym.java 6. compiler l'analyseur lexical jflex monfichier.jflex 7. compiler l'analyseur lexical javac -cp.:java-cup-11a.jar Yylex.java si son nom est Yylex.java 8. compiler l'analyseur syntaxique javac -cp.:java-cup-11a.jar parser.java 9. compiler le Main qui appelle l'analyseur syntaxique javac -cp.:java-cup-11a.jar Main.java 10. et enn exécuter votre analyseur syntaxique java -cp.:java-cup-11a.jar Main fichier_a_analyse Votre programme Main devra être semblable à celui ci-dessous : import java. i o. ; import java_cup. runtime. ; p u b l i c c l a s s Main { p u b l i c s t a t i c void main ( S t r i n g argv [ ] ) { t r y { / I n s t a n t i a t e the s c a n n er and open input f i l e argv [ 0 ] / Yylex l = new Yylex ( new F i l e R e a d e r ( argv [ 0 ] ) ) ; 4

} } / I n s t a n t i a t e the p a r s e r / p a r s e r p = new p a r s e r ( l ) ; / S t a r t the p a r s e r / Object r e s u l t = p. p a r s e ( ) ; } catch ( Exception e ) { e. p r i n t S t a c k T r a c e ( ) ; } 5