meknour
Messages postés10Date d'inscriptionmercredi 11 mai 2011StatutMembreDernière intervention25 décembre 2011 21 déc. 2011 à 12:33
//test.txt
((23alpha-beta + gamma )/20)
est que l'erreur c'est une erreur de syntaxe???? mais les langage que nous connaissant siqnalent une erreur lexical
et merci
meknour
Messages postés10Date d'inscriptionmercredi 11 mai 2011StatutMembreDernière intervention25 décembre 2011 20 déc. 2011 à 20:26
hello,
j'ai une question,dans l'execution de cette programe le compilateur s'affiche pas l'erreur exactement par exemple
//test.txt
2a
c'est une erreur lexical mais le pgm signale une erreur de syntaxe,oui c'est une erreur de syntaxe mais avant que dire s'est une erreur de syntaxe c'est une erreur lex
que fait pour résoudre le probleme?????
MBARKI2005
Messages postés5Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention19 décembre 2011 19 déc. 2011 à 23:22
Bonjour,
Vous gardez le même projet et vous modifiez les fichiers suivants :
if(caractereCourant=='+')
return new UniteLexicale(Categorie.PLUS, "");
if(caractereCourant=='-')
return new UniteLexicale(Categorie.MOINS, "");
if(caractereCourant=='/')
return new UniteLexicale(Categorie.DIVISE, "");
if(caractereCourant=='*')
return new UniteLexicale(Categorie.FOIS, "");
if(caractereCourant=='(')
return new UniteLexicale(Categorie.PARENG, "");
if(caractereCourant==')')
return new UniteLexicale(Categorie.PAREND, "");
return null;
}
public UniteLexicale getID() {
int etat=0;
StringBuffer sb=new StringBuffer();
while(true) {
switch(etat) {
case 0 : etat=1;
sb.append(caractereCourant);
break;
case 1 : caractereSuivant();
if(eof)
etat=3;
else
if(Character.isLetterOrDigit(caractereCourant))
sb.append(caractereCourant);
else
etat=2;
break;
case 2 : reculer();
return new UniteLexicale(Categorie.ID, sb.toString());
case 3 : return new UniteLexicale(Categorie.ID, sb.toString());
}
}
}
public UniteLexicale getNombre() {
int etat=0;
StringBuffer sb=new StringBuffer();
while(true) {
switch(etat) {
case 0 : etat=1;
sb.append(caractereCourant);
break;
case 1 : caractereSuivant();
if(eof)
etat=3;
else
if(Character.isDigit(caractereCourant))
sb.append(caractereCourant);
else
etat=2;
break;
case 2 : reculer();
return new UniteLexicale(Categorie.NOMBRE, sb.toString());
case 3 : return new UniteLexicale(Categorie.NOMBRE, sb.toString());
}
}
}
@Override
public String toString() {
// TODO Auto-generated method stub
return fluxCaracteres.toString();
}
}
//grammaire.txt
e::=t eprime
eprime::=plus t eprime
eprime::=moins t eprime
eprime::=nul
t::=f tprime
tprime::=fois f tprime
tprime::=divise f tprime
tprime::=nul
f::=id
f::=nombre
f::=pareng e parend
//test.txt
((alpha-beta + gamma )/20)
meknour
Messages postés10Date d'inscriptionmercredi 11 mai 2011StatutMembreDernière intervention25 décembre 2011 19 déc. 2011 à 20:11
hello,
je modife le corp de cette application et j'ajoute la division et la soustraction mais il y'a boucoup d'erreur je demande l'aide et merci
MBARKI2005
Messages postés5Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention19 décembre 2011 19 déc. 2011 à 11:40
Bonjour,
En modifiant la grammaire, vous avez ajouté une unité lexical (moins). Ce qui fait que vous devez mettre à jour Categorie et Scanner pour que ça marche.
Si vous rencontrez des difficultés, prévenez moi.
A+
meknour
Messages postés10Date d'inscriptionmercredi 11 mai 2011StatutMembreDernière intervention25 décembre 2011 18 déc. 2011 à 09:48
hello,
j'ai un problème q'on je modifier cette code avec une gramaire
e::=t eprime
eprime::=plus t eprime
eprime::moins t eprime
eprime::=nul
t::=f tprime
tprime::=fois f tprime
tprime::=nul
f::=id
f::=nombre
f::=pareng e parend
Please help and thank you!!!!!!
MBARKI2005
Messages postés5Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention19 décembre 2011 2 déc. 2011 à 17:43
Hello,
For the comments, i will add them later.
The public UniteLexicale getID() method implements a Transition Diagram that is like the Automata model.
Thank you for your interest
casandra4009
Messages postés3Date d'inscriptionsamedi 26 novembre 2011StatutMembreDernière intervention 4 décembre 2011 2 déc. 2011 à 15:21
knock knock is anybody home?!! :p
casandra4009
Messages postés3Date d'inscriptionsamedi 26 novembre 2011StatutMembreDernière intervention 4 décembre 2011 1 déc. 2011 à 20:49
hello , this code is kindda hard to understand please add comments to make it clear and easy to understand ,thank you.and my question is : public UniteLexicale getID() {
int etat=0;
StringBuffer sb=new StringBuffer();
while(true) {
switch(etat) {
case 0 : etat=1;
sb.append(caractereCourant);
break;
case 1 : caractereSuivant();
if(eof)
etat=3;
else
if(Character.isLetterOrDigit(caractereCourant))
sb.append(caractereCourant);
else
etat=2;
break;
case 2 : reculer();
return new UniteLexicale(Categorie.ID, sb.toString());
case 3 : return new UniteLexicale(Categorie.ID, sb.toString());
}
}
}
is that an imlementation of an automata?if true is that the onley way? .thank you
MBARKI2005
Messages postés5Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention19 décembre 2011 14 nov. 2011 à 22:08
Bonjour,
L'analyse syntaxique est une étape importante en compilation. Elle consiste à vérifier si un mot (programme source) appartient au langage de la grammaire. Cette analyse peut se faire de façon descendante (partant de l'axiome et arrivant aux lexemes) ou de façon ascendante (partant des lexemes et arrivant à l'axiome). L'analyse descendente peut se faire de façon récursive ou prédictive c'est à dire à partir du lexeme courant on connait le lexeme suivant et on peut par conséquent décider quelle règle de la grammaire appliquer.
johnmule
Messages postés8Date d'inscriptionvendredi 1 juillet 2011StatutMembreDernière intervention12 juillet 2012 14 nov. 2011 à 14:18
Bonjour! Que signifie Analyse séscendante prédictive LL1, pouvez vous me le decrir?
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 12 nov. 2011 à 23:51
Ok, merci, ta source est maintenant de bien meilleure qualité.
a+
MBARKI2005
Messages postés5Date d'inscriptionmardi 24 mai 2005StatutMembreDernière intervention19 décembre 2011 12 nov. 2011 à 21:40
Bonjour,
Au fait le code source affiché est incomplet, J'ai inséré une seule classe Parser (Analyse déscendente prédictive LL1). Les autres se trouvent dans le fichier compréssé pour un éventuel test. La classe Main s'y trouve également.
Merci à vous.
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 12 nov. 2011 à 19:33
Je pense que ton code est intéressant mais en l'état, il est inexploitable, ainsi, si tu ne le met pas à jour, je serai obligé de le désactiver : juste une description plus claire et une méthode main suffiront.
Merci
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 12 nov. 2011 à 19:31
Bonjour,
Je ne vois pas vraiment à quoi sert ce code, je ne comprend pas comment l'utiliser, une méthode main dans la classe pourrait être utile certainement.
De plus, ta description n'est pas très claire : que fait ce programme exactement. Je sais que tu implémentes des pattern, mais je ne comprend pas ce que tu fais ??
21 déc. 2011 à 12:33
((23alpha-beta + gamma )/20)
est que l'erreur c'est une erreur de syntaxe???? mais les langage que nous connaissant siqnalent une erreur lexical
et merci
20 déc. 2011 à 20:26
j'ai une question,dans l'execution de cette programe le compilateur s'affiche pas l'erreur exactement par exemple
//test.txt
2a
c'est une erreur lexical mais le pgm signale une erreur de syntaxe,oui c'est une erreur de syntaxe mais avant que dire s'est une erreur de syntaxe c'est une erreur lex
que fait pour résoudre le probleme?????
19 déc. 2011 à 23:22
Vous gardez le même projet et vous modifiez les fichiers suivants :
//Categorie.java
package smi5.compilation.anaLex;
/**
* @author samir MBARKI
* @version 06/11/2011
*/
public enum Categorie{
EOF,
$,
NUL,
PAREND,
PARENG,
PLUS,
FOIS,
NOMBRE,
ID,
MOINS,
DIVISE,
E,
EPRIME,
T,
TPRIME,
F;
public static final int MIN=3, MAX=10, MAX1=15;
public String toString() {
return this.name().toLowerCase();
}
public static Categorie toCategorie(String s) {
for(Categorie c:Categorie.values())
if(c.toString().equalsIgnoreCase(s))
return c;
return null;
}
public boolean estTerminal() {
return ordinal()>=MIN && ordinal()<=MAX;
}
public boolean estNonTerminal() {
return ordinal()>MAX;
}
}
//Scanner.java
package smi5.compilation.anaLex;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
/**
* @author samir MBARKI
* @version 06/11/2011
*/
public class Scanner {
private ArrayList<Character> fluxCaracteres;
private int indiceCourant;
private char caractereCourant;
private boolean eof;
public Scanner() {
this("");
}
public Scanner(String nomFich) {
BufferedReader f=null;
int car=0;
fluxCaracteres=new ArrayList<Character>();
indiceCourant=0;
eof=false;
try {
f=new BufferedReader(new FileReader(nomFich));
}
catch(IOException e) {
System.out.println("taper votre texte ci-dessous (ctrl+z pour finir)");
f=new BufferedReader(new InputStreamReader(System.in));
}
try {
while((car=f.read())!=-1)
fluxCaracteres.add((char)car);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void caractereSuivant() {
if(indiceCourant<fluxCaracteres.size())
caractereCourant=fluxCaracteres.get(indiceCourant++);
else
eof=true;
}
public void reculer() {
if(indiceCourant>0)
indiceCourant--;
}
public UniteLexicale lexemeSuivant() {
caractereSuivant();
while(eof || Character.isWhitespace(caractereCourant)) {
if (eof)
return new UniteLexicale(Categorie.EOF, "");
caractereSuivant();
}
if(Character.isLetter(caractereCourant))
return getID();
if(Character.isDigit(caractereCourant))
return getNombre();
if(caractereCourant=='+')
return new UniteLexicale(Categorie.PLUS, "");
if(caractereCourant=='-')
return new UniteLexicale(Categorie.MOINS, "");
if(caractereCourant=='/')
return new UniteLexicale(Categorie.DIVISE, "");
if(caractereCourant=='*')
return new UniteLexicale(Categorie.FOIS, "");
if(caractereCourant=='(')
return new UniteLexicale(Categorie.PARENG, "");
if(caractereCourant==')')
return new UniteLexicale(Categorie.PAREND, "");
return null;
}
public UniteLexicale getID() {
int etat=0;
StringBuffer sb=new StringBuffer();
while(true) {
switch(etat) {
case 0 : etat=1;
sb.append(caractereCourant);
break;
case 1 : caractereSuivant();
if(eof)
etat=3;
else
if(Character.isLetterOrDigit(caractereCourant))
sb.append(caractereCourant);
else
etat=2;
break;
case 2 : reculer();
return new UniteLexicale(Categorie.ID, sb.toString());
case 3 : return new UniteLexicale(Categorie.ID, sb.toString());
}
}
}
public UniteLexicale getNombre() {
int etat=0;
StringBuffer sb=new StringBuffer();
while(true) {
switch(etat) {
case 0 : etat=1;
sb.append(caractereCourant);
break;
case 1 : caractereSuivant();
if(eof)
etat=3;
else
if(Character.isDigit(caractereCourant))
sb.append(caractereCourant);
else
etat=2;
break;
case 2 : reculer();
return new UniteLexicale(Categorie.NOMBRE, sb.toString());
case 3 : return new UniteLexicale(Categorie.NOMBRE, sb.toString());
}
}
}
@Override
public String toString() {
// TODO Auto-generated method stub
return fluxCaracteres.toString();
}
}
//grammaire.txt
e::=t eprime
eprime::=plus t eprime
eprime::=moins t eprime
eprime::=nul
t::=f tprime
tprime::=fois f tprime
tprime::=divise f tprime
tprime::=nul
f::=id
f::=nombre
f::=pareng e parend
//test.txt
((alpha-beta + gamma )/20)
19 déc. 2011 à 20:11
je modife le corp de cette application et j'ajoute la division et la soustraction mais il y'a boucoup d'erreur je demande l'aide et merci
19 déc. 2011 à 11:40
En modifiant la grammaire, vous avez ajouté une unité lexical (moins). Ce qui fait que vous devez mettre à jour Categorie et Scanner pour que ça marche.
Si vous rencontrez des difficultés, prévenez moi.
A+
18 déc. 2011 à 09:48
j'ai un problème q'on je modifier cette code avec une gramaire
e::=t eprime
eprime::=plus t eprime
eprime::moins t eprime
eprime::=nul
t::=f tprime
tprime::=fois f tprime
tprime::=nul
f::=id
f::=nombre
f::=pareng e parend
Please help and thank you!!!!!!
2 déc. 2011 à 17:43
For the comments, i will add them later.
The public UniteLexicale getID() method implements a Transition Diagram that is like the Automata model.
Thank you for your interest
2 déc. 2011 à 15:21
1 déc. 2011 à 20:49
int etat=0;
StringBuffer sb=new StringBuffer();
while(true) {
switch(etat) {
case 0 : etat=1;
sb.append(caractereCourant);
break;
case 1 : caractereSuivant();
if(eof)
etat=3;
else
if(Character.isLetterOrDigit(caractereCourant))
sb.append(caractereCourant);
else
etat=2;
break;
case 2 : reculer();
return new UniteLexicale(Categorie.ID, sb.toString());
case 3 : return new UniteLexicale(Categorie.ID, sb.toString());
}
}
}
is that an imlementation of an automata?if true is that the onley way? .thank you
14 nov. 2011 à 22:08
L'analyse syntaxique est une étape importante en compilation. Elle consiste à vérifier si un mot (programme source) appartient au langage de la grammaire. Cette analyse peut se faire de façon descendante (partant de l'axiome et arrivant aux lexemes) ou de façon ascendante (partant des lexemes et arrivant à l'axiome). L'analyse descendente peut se faire de façon récursive ou prédictive c'est à dire à partir du lexeme courant on connait le lexeme suivant et on peut par conséquent décider quelle règle de la grammaire appliquer.
14 nov. 2011 à 14:18
12 nov. 2011 à 23:51
a+
12 nov. 2011 à 21:40
Au fait le code source affiché est incomplet, J'ai inséré une seule classe Parser (Analyse déscendente prédictive LL1). Les autres se trouvent dans le fichier compréssé pour un éventuel test. La classe Main s'y trouve également.
Merci à vous.
12 nov. 2011 à 19:33
Merci
12 nov. 2011 à 19:31
Je ne vois pas vraiment à quoi sert ce code, je ne comprend pas comment l'utiliser, une méthode main dans la classe pourrait être utile certainement.
De plus, ta description n'est pas très claire : que fait ce programme exactement. Je sais que tu implémentes des pattern, mais je ne comprend pas ce que tu fais ??