Introduction. Téléchargement CUP http://www2.cs.tum.edu/projects/cup/java cup 11b.jar Jflex + Documentation http://jflex.de/jflex 1.5.1.



Documents pareils
Traduction des Langages : Le Compilateur Micro Java

Création d un service web avec NetBeans 5.5 et SJAS 9

Java Licence Professionnelle CISII,

Évaluation et implémentation des langages

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Introduction à Eclipse

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

Arbres binaires de recherche

Open Source Job Scheduler. Installation(s)

Génie Logiciel avec Ada. 4 février 2013

Cours 1 : La compilation

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

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

TP1 : Initiation à Java et Eclipse

Introduction aux Machines Virtuelles avec VMKit

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

Oracle WebLogic Server (WLS) 11gR1 ( et ) Installation sur Oracle Linux 5 et 6 Hypothèses Installation Oracle Linux 5 (OL5)

TP1 : Initiation à Java et Eclipse

Sauvegarde de postes clients avec BackupPC

Chapitre VI- La validation de la composition.

Créer une base de données vidéo sans programmation (avec Drupal)

A. Architecture du serveur Tomcat 6

Aide - mémoire gnuplot 4.0

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

Utilisation de Jakarta Tomcat

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

7 Développement d une application de MapReduce

Projet Java EE Approfondi

Manuel d utilisation du module Liste de cadeaux PRO par Alize Web

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

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Etude de cas : PGE JEE V2

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Eclipse atelier Java

Cours 1: Java et les objets

Environnements de développement (intégrés)

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

TUTORIEL: INSTALLATION D'UN SERVEUR LOCAL SOUS WINDOWS 7 POUR APPINVENTOR version du 06/04/2013

Vérification formelle de la plate-forme Java Card

Bases Java - Eclipse / Netbeans

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

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Le prototype de la fonction main()

as Architecture des Systèmes d Information

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

Serveur d Applications Web : WebObjects

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

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

Encryptions, compression et partitionnement des données

Interpréteur d algèbre relationnelle

Théorie des Langages

Differential Synchronization

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Chapitre I Notions de base et outils de travail

IFT Systèmes d exploitation - TP n 1-20%

La base de données XML exist. A. Belaïd

Compilation (INF 564)

Glassfish dans le milieu médical. Sun Aquarium Paris 26 Juin 2009 Jacky Renno

APIs de table pour SQL Server

Machine virtuelle Java pour Palm TX

1. Base de données SQLite

Initiation à l algorithmique

TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Installer et configurer Oracle Forms 11gR2 Windows 7 64 bits

JOnAS Day 5.1. Outils de développements

Tutoriel d installation de Hibernate avec Eclipse

Tutoriel BlueJ. Michael Kölling Mærsk Institute University of Southern Denmark. Version 1.4 fr-2 par le groupe Sigma 1 pour BlueJ Version 1.2.

TD/TP 1 Introduction au SDK d Android

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

[ GLPI et OCS pour Gentoo 2006] ArtisanMicro. Alexandre BALMES

Construire des plug-ins pour SAS Management Console SAS 9.1

Module d anonymisation

WEB page builder and server for SCADA applications usable from a WEB navigator

Ce TP consiste à installer, configurer et tester un serveur DNS sous Linux. Serveur open source : bind9 Distribution : Mandriva

Sage 50 Version Nouveautés. Comptabilité générale. Sous réserve de modifications. Fonctionnalité Sage 50 Lite. Sage 50 Professional

RMI le langage Java XII-1 JMF

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

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Accès à l'information XML par des requêtes XQuery au travers de son XSchema

AIDE ENTREPRISE SIS-ePP Plateforme de dématérialisation des marchés publics

[Projet S9] Rédacteurs & Contributeurs Entité Rédacteurs Contributeurs Imededdine HOSNI Olivier MARTY. Validation du document Nom Date Visa

Nouvelle approche de validation Novo Nordisk

Debian Lenny - Virtualisation avec Libvirt/KVM Debian GNU/Linux

Rapport de Mini-Projet en ArcGIS Engine

Création et Gestion des tables

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

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

Qu est-ce que l analyse des données qualitatives? TAMS Analyzer n est: Projets collaboratifs. TAMS Analyzer permet:

Réglages du portail de P&WC

Introduction au Déploiement

Introduction à MATLAB R

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

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Transcription:

Cup et JFlex

Introduction Téléchargement CUP http://www2.cs.tum.edu/projects/cup/java cup 11b.jar Jflex + Documentation http://jflex.de/jflex 1.5.1.zip Documentation en ligne Cup http://www2.cs.tum.edu/projects/cup/manual.html JFlex http://jflex.de/manual.html Compilation java jar java cup 11b.jar parse0.cup Résultat: sym.java: la table des symboles contenant les terminaux parser.java

CUP Structure d un fichier CUP Un fichier CUP (extension:.cup) est composé de quatre sections qui doivent être dans l ordre suivant: déclarations préliminaires (section non obligatoire) Code utilisateur (section non obligatoire) Définition des terminaux et des non terminaux. Précédence et associativité des terminaux. (non obligatoire) La grammaire. 1. La première section peut contenir: le nom du package de la classe parser.java (classe générée par CUP). Imports de packages java. Exemple : package lir; import java_cup.runtime.*;

2. Code utilisateur Cette peut contenir du code java qui sera inclus dans le parseur, parser code {: Le contenu sera inclus dans la classe parse. :}; 3. Déclaration de terminaux Syntaxe : terminal [Type] T1[,T2 ] ; non terminal [Type] n1[,n2 ]; 4. Précédence et associativité des terminaux precedence left T1[, T2...]; precedence right T1[, T2...]; precedence nonassoc T1[, T2...]; 5. La grammaire par défaut l axiome est le non terminal de la partie gauche de la première production. La directive «startwith N;» permet de définir l axiome. la grammaire est définie par une liste de productions, exemple d une production instruction ::= affectation affichage ; on peut aussi exécuter des actions sémantiques écrites en Java si la production est utilisée, exemple: expression ::= expression:e1 ADD expression:e2 {: RESULT = new Integer(e1.intValue() + e2.intvalue()); :} RESULT désigne toujours le non terminal de la partie gauche.

Exécution: java jar chemin/java cup 11b.jar lir.cup. Résultat: parser.java: implémentation du parseur sym.java: contient les constantes qui représentent les terminaux.

Actions sémantiques Une action sémantique est exprimée entre les délimiteurs {: et :} Exemple expr:e1 PLUS expr:e2 {: RESULT = new Integer(e1.intValue() + e2.intvalue()); :} Le premier non terminal est étiquetté par e1 et le deuxième par e2. Le non terminal de la partie gauche d une production est toujours étiquetté par RESULT. Chaque symbole dans une production est représenté par un objet de type Symobl (dans la pile d analyse ). Une étiquette fait référence à un objet dont la référence est stocké dans le champ value de la classe Symbol Pour chaque étiquette par exemple e1, deux autres variables sont accessibles dans l action sémantique (e1left et e1right qui sont du même type que e1)

init with {: scanner.init(); :}; Le code contenu dans l'action de la clause "init with" de la spécification sera exécuté avant que les jetons ne soient demandés le token sera demandé l'aide du code de la clause "scan with«

Le Scanner Le scanner doit retourner des objets de type Symbol, la valeur est stockée dans l attribut value et le type doit être identique à celui présent dans la déclaration du fichier cup. Les symboles déclarés sans type de données ont la valeur null dans l attribut value. Le code contenu dans l'action de la clause "init with" de la spécification sera exécuté avant que les jetons soient demandés

JFlex Installation Modifier le fichier bin/jflex.bat (JAVA_HOME doit être déjà définie) JFLEX_HOME=c:\JFLEX Exécution jflex <options> <inputfiles> java jar jflex 1.5.1.jar <options> <inputfiles> Un fichier Jflex est composé de 3 sections: Code de l utilisateur %% Options et déclarations de macros %% Règles lexicales C:\jflex-1.5.1\ +--bin\ (start scripts) +--doc\ (FAQ and manual) +--examples\ +--byaccj\ (calculator example for BYacc/J) +--cup\ (calculator example for cup) +--interpreter\ (interpreter example for cup) +--java\ (Java lexer specification) +--simple-maven\ (example scanner built with maven) +--standalone-maven\ (a simple standalone scanner, built with maven) +--lib\ (precompiled classes, skeleton files) +--src\ +--main\ +--cup\ (JFlex parser spec) +--java\ +--java_cup\ +--runtime\ +--jflex\ +--gui\ +--jflex\ +--resources\ +--test\ (source code of cup runtime classes) (source code of JFlex) (source code of JFlex UI classes) (JFlex scanner spec) (messages and default skeleton file) (unit tests) m

Code utilisateur Le contenu de cette section sera recopié dans le fichier généré par Jflex avant la déclaration de la classe. Essentiellement, le code écrit ici contiendra des imports de packages. Options et déclarations 1. Options Les options permettent de passer des arguments à l outil JFlex. %class Lexeur: demande à JFlex de nommer le fichier produit Lexeur.java. %public, %final, %abstract, %implements interface1 : demande à JFlex de déclarer la classe produite avec l option correspondante. %cup: permet d intégrer JFlex avec Cup. %line %column: permet de compter les lignes et les colonnes dans les variables yyline et yycolumn respectivement. 2. Déclarations Les déclarations d abréviations permettent de simplifier la définition des unités lexicales.

Options Mode de compatibilité CUP %cup %implements java_cup.runtime.scanner %function next_token %type java_cup.runtime.symbol %eofval{ return new java_cup.runtime.symbol(<cupsym>.eof); %eofval} %eofclose /* Fermer le flux si EOF atteinte. Par défaut CUPSYM est sym, peut être modifié par %cupsym