uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
16 juil. 2009 à 18:38
biline1miline
Messages postés18Date d'inscriptiondimanche 2 novembre 2008StatutMembreDernière intervention 3 mai 2012
-
14 mars 2010 à 11:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
biline1miline
Messages postés18Date d'inscriptiondimanche 2 novembre 2008StatutMembreDernière intervention 3 mai 2012 14 mars 2010 à 11:06
Précision: je travail avec JAVA sous eclipse
voilà j'ai téléchargé les deux jar
et je les ai rajouté au librairie et importer
j'ai cette erreur:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d8f6188, pid=2968, tid=3352
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) Client VM (14.0-b16 mixed mode windows-x86 )
# Problematic frame:
# V [jvm.dll+0xf6188]
#
# An error report file with more information is saved as:
# D:\Amina\WorkSpace\Pre_processing\hs_err_pid2968.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
biline1miline
Messages postés18Date d'inscriptiondimanche 2 novembre 2008StatutMembreDernière intervention 3 mai 2012 14 mars 2010 à 10:08
Salut,
Merci pour tes réponse
j'ai été prise par un autre travail.
voilà le lien ou j'ai trouvé ce qu'il faut faire par rapport à ton idée
mais ça ne marche pas peut etre que tu pourrais m'orienté vers un autre lien ou me dire ce qui manque
LandTech
Messages postés73Date d'inscriptiondimanche 14 octobre 2007StatutMembreDernière intervention28 février 2011 5 mars 2010 à 17:51
Salut,
Pour les chemins, dans le pire des cas, tu peux utiliser les chemins courts (Type DOS).
Pour cela il suffit d'utiliser l'API GetShortPathNameA qui te retourne la taille du chemin court et le chemin court dans la variable lpszShortPath .
et sinon, je veux bien t'aider.
Voila.
biline1miline
Messages postés18Date d'inscriptiondimanche 2 novembre 2008StatutMembreDernière intervention 3 mai 2012 26 févr. 2010 à 02:43
j'ai trouvé ou est le problème
c'est le fichier où se trouve les fichier de test
in_path: c'est un chemin qui n'est pas donné en dur
il est en paramètre
pour spécifier le chemin des test
je l'ai afficher il contient ça
D:\Amina\WorkSpace\ParseurCPP7\.\TestCases\main.cpp
voilà en faite il y a deux cas ou ça ne marche
c'est quant le chemin des dossier cpp est trop long
et quant le nom du fichier en sortie dépasse 8 caractère
j'ai lu qu'il y'avait une limitation
parceque quant je change de chemin ça marche tres bien
est ce que tu peux m'aider??
LandTech
Messages postés73Date d'inscriptiondimanche 14 octobre 2007StatutMembreDernière intervention28 février 2011 25 févr. 2010 à 17:50
Salut,
Il faut remplacer command.com par cmd.exe, command.com est l'ancien nom de cmd.exe.
Voilà
biline1miline
Messages postés18Date d'inscriptiondimanche 2 novembre 2008StatutMembreDernière intervention 3 mai 2012 24 févr. 2010 à 14:58
Bonjour,
voilà j'ai postulé mon problème sur un autre site
mais comme ton travail est similaire au mien tu pourra peut etre m'aider
voilà je dois faire un parsing
mais avant celà je le fais passer par un pre processing
mais j'évite tout ce qui est système pour des raisons
mais j'ai créer un fichier dans lequel il y a le traitement de tout les macro les plus utilisées
mais voilà la commande sur l'invite de commande passe tres bien mais pas en java
voilà le problème détaillé
merci de me répondre
Je travail sur le pre processsing de c++
Seulement là il y a un problème avec les marco système
La solution a été donc de créer un fichier fichier.h dans lequel je mettrai tout les macro les plus utilisés
Pour inclure #include " fichier.h" il faut rajouter au bien par programmation
Et dans ce cas je dois toucher au code source client
Ou alors me referer au commande gcc
J'ai fais une petite recherche pour trouver l'option à intégrer pour
ajouter le fichier fichier.h et je suis tomber sur celle là -include
voilà sur l'invite de commande ça marche très bien
D:\Amina\WorkSpace\ParseurCPP5> ? Le chemin vers le gcc
Resource\gcc.exe -E -B Resource ? Exécuter que le pre processing
-I libM - ? Donner le chemin ou se trouve le fichier .h
-include fichier.h ? L’option pour ajouter le fichier .h
TestCases\main.cpp > Test\resl.cpp ?Le fichier d’entrée cpp (main.cpp) et celui de sortie pour le parsing(resl.cpp)
seulement voilà si j'exécute la commande suivante
et que je met la ligne "fichier.h" dans le fichier cpp alors ça marche
et si je veux rajouter la ligne de commande qui fais ça sans passer par programmation
en mettant cette commande
String[] Commande = new String[] {"command.com","/C",
"Resource\\gcc.exe",
"-E",
"-B","Resource",
"-I","LibM",
"-include","fichier.h",
in_path,
">",
"test\"+out_path};
ça ne marche plus
ERROR [main] - java.io.IOException: Cannot run program "command.com": CreateProcess error=87, Paramètre incorrect
je ne vois pas ou est le problème puisque avec l'invite de commande ça marche.
tout marche sauf cette quant j'ajoute l'option
Cordialement.
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 26 janv. 2010 à 14:39
salut,
en premier on dit à yacc d'utiliser une structure d'arbre comme YYSTYPE:
#define YYSTYPE tree_t
YYSTYPE c'est la structure (instanciée sous le nom yyval dans le parser) qui permet de sauvegarder des états sémantiques, c'est donc par l'intermédiaire de cette variable que tout ce fait dans un programme utilisant yacc
la structure tree_t est définie dans le .h
ensuite le hack (détournement) de yacc est ici (ligne "hack:" dans la grammaire .y)
on active le mode debug: #define YYDEBUG 1
et on redéfinit la macro YY_SYMBOL_PRINT :
// le hack: on hack une des macros utilisées en mode YYDEBUG pour éxecuter notre action (création de l'arbre) à chaque réduction
#undef YY_SYMBOL_PRINT
#define YY_SYMBOL_PRINT(A,B,C,D) \
do { \
int n = yyr2[yyn]; \
int i; \
yyval.nb_links = n; \
yyval.links = malloc(sizeof *yyval.links * yyval.nb_links); \
yyval.str = NULL; \
yyval.type = yytname[yyr1[yyn]]; \
for (i = 0; i < n; i++) { \
yyval.links[i] = malloc(sizeof (YYSTYPE)); \
memcpy(yyval.links[i], &yyvsp[(i + 1) - n], sizeof (YYSTYPE)); \
} \
} while (0)
en activant le debug, YY_SYMBOL_PRINT est appelé à chaque réduction, et le YY_SYMBOL_PRINT ainsi redéfini construit l'abre syntaxique (yyval, variable interne de yacc est de type YYSTYPE c'est à dire de type tree_t)
conclusion : j'aurais pu près chaque ligne de la grammaire rajouter un appel à construire_noeud(fils1,fils2,fils3...) et stocker le noeud ainsi créé dans le yyval, mais ici j'ai trouvé un moyen d'éviter ça même si le résultat est le même
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 17 janv. 2010 à 19:08
Salut,
Apparemment, gcc est construit avec yacc. Il a donc récupéré le fichier yacc (visible dans les sources de gcc), et fait un hook pour intercepter les actions et en ajouter une. (différence hook / hack, je ne sais pas, à voir sur google).
Cordialement, uaip.
LandTech
Messages postés73Date d'inscriptiondimanche 14 octobre 2007StatutMembreDernière intervention28 février 2011 17 janv. 2010 à 17:37
Bonjour,
Tout d'abord très bonne source.
Deuxièmement, je voulais savoir comment vous aviez fait pour modifier la grammaire yacc du parser de GCC.
Vous dites l'avoir fait avec un "hack", c'est à dire ?
Merci d'avance
LandTech
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 21 juil. 2009 à 23:35
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 21 juil. 2009 à 15:22
salut je l'ai fait sous cygwin avec bison 2.3 et flex 2.5.4
n'hésitez pas à me rendre compte de vos expériences problèmes avec ce parseur
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 16 juil. 2009 à 18:38
Salut,
Avec quelles versions de yacc et lex avez-vous obtenu les .c et .h (version linux ou windows) ? Si windows, quelles lib(s) avez-vous utilisée(s) ?
Je m'explique : j'ai créé un projet avec flex/bison et utilisé libfl.a pour compiler les .c et .h générés. En projet sous console, ça fonctionne, mais pas en projet win32 (GUI). C'est en incluant la lib que j'obtiens l'erreur.
14 mars 2010 à 11:06
voilà j'ai téléchargé les deux jar
et je les ai rajouté au librairie et importer
j'ai cette erreur:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d8f6188, pid=2968, tid=3352
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) Client VM (14.0-b16 mixed mode windows-x86 )
# Problematic frame:
# V [jvm.dll+0xf6188]
#
# An error report file with more information is saved as:
# D:\Amina\WorkSpace\Pre_processing\hs_err_pid2968.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
14 mars 2010 à 10:08
Merci pour tes réponse
j'ai été prise par un autre travail.
voilà le lien ou j'ai trouvé ce qu'il faut faire par rapport à ton idée
mais ça ne marche pas peut etre que tu pourrais m'orienté vers un autre lien ou me dire ce qui manque
http://dolf.trieschnigg.nl/eightpointthree/eightpointthree.html
5 mars 2010 à 17:51
Pour les chemins, dans le pire des cas, tu peux utiliser les chemins courts (Type DOS).
Pour cela il suffit d'utiliser l'API GetShortPathNameA qui te retourne la taille du chemin court et le chemin court dans la variable lpszShortPath .
et sinon, je veux bien t'aider.
Voila.
26 févr. 2010 à 02:43
c'est le fichier où se trouve les fichier de test
in_path: c'est un chemin qui n'est pas donné en dur
il est en paramètre
pour spécifier le chemin des test
je l'ai afficher il contient ça
D:\Amina\WorkSpace\ParseurCPP7\.\TestCases\main.cpp
voilà en faite il y a deux cas ou ça ne marche
c'est quant le chemin des dossier cpp est trop long
et quant le nom du fichier en sortie dépasse 8 caractère
j'ai lu qu'il y'avait une limitation
parceque quant je change de chemin ça marche tres bien
est ce que tu peux m'aider??
25 févr. 2010 à 17:50
Il faut remplacer command.com par cmd.exe, command.com est l'ancien nom de cmd.exe.
Voilà
24 févr. 2010 à 14:58
voilà j'ai postulé mon problème sur un autre site
mais comme ton travail est similaire au mien tu pourra peut etre m'aider
voilà je dois faire un parsing
mais avant celà je le fais passer par un pre processing
mais j'évite tout ce qui est système pour des raisons
mais j'ai créer un fichier dans lequel il y a le traitement de tout les macro les plus utilisées
mais voilà la commande sur l'invite de commande passe tres bien mais pas en java
voilà le problème détaillé
merci de me répondre
Je travail sur le pre processsing de c++
Seulement là il y a un problème avec les marco système
La solution a été donc de créer un fichier fichier.h dans lequel je mettrai tout les macro les plus utilisés
Pour inclure #include " fichier.h" il faut rajouter au bien par programmation
Et dans ce cas je dois toucher au code source client
Ou alors me referer au commande gcc
J'ai fais une petite recherche pour trouver l'option à intégrer pour
ajouter le fichier fichier.h et je suis tomber sur celle là -include
voilà sur l'invite de commande ça marche très bien
D:\Amina\WorkSpace\ParseurCPP5> Resource\gcc.exe -E -B Resource
-I Resource\libM -include fichier.h
TestCases\main.cpp > Test\resl.cpp
D:\Amina\WorkSpace\ParseurCPP5> ? Le chemin vers le gcc
Resource\gcc.exe -E -B Resource ? Exécuter que le pre processing
-I libM - ? Donner le chemin ou se trouve le fichier .h
-include fichier.h ? L’option pour ajouter le fichier .h
TestCases\main.cpp > Test\resl.cpp ?Le fichier d’entrée cpp (main.cpp) et celui de sortie pour le parsing(resl.cpp)
seulement voilà si j'exécute la commande suivante
et que je met la ligne "fichier.h" dans le fichier cpp alors ça marche
String[] Commande = new String[] {"command.com","/C",
"Resource\\gcc.exe",
"-E",
"-B","Resource",
"-I","LibM",
in_path,
">",
"test\"+out_path};
et si je veux rajouter la ligne de commande qui fais ça sans passer par programmation
en mettant cette commande
String[] Commande = new String[] {"command.com","/C",
"Resource\\gcc.exe",
"-E",
"-B","Resource",
"-I","LibM",
"-include","fichier.h",
in_path,
">",
"test\"+out_path};
ça ne marche plus
ERROR [main] - java.io.IOException: Cannot run program "command.com": CreateProcess error=87, Paramètre incorrect
je ne vois pas ou est le problème puisque avec l'invite de commande ça marche.
tout marche sauf cette quant j'ajoute l'option
Cordialement.
26 janv. 2010 à 14:39
en premier on dit à yacc d'utiliser une structure d'arbre comme YYSTYPE:
#define YYSTYPE tree_t
YYSTYPE c'est la structure (instanciée sous le nom yyval dans le parser) qui permet de sauvegarder des états sémantiques, c'est donc par l'intermédiaire de cette variable que tout ce fait dans un programme utilisant yacc
la structure tree_t est définie dans le .h
ensuite le hack (détournement) de yacc est ici (ligne "hack:" dans la grammaire .y)
on active le mode debug: #define YYDEBUG 1
et on redéfinit la macro YY_SYMBOL_PRINT :
// le hack: on hack une des macros utilisées en mode YYDEBUG pour éxecuter notre action (création de l'arbre) à chaque réduction
#undef YY_SYMBOL_PRINT
#define YY_SYMBOL_PRINT(A,B,C,D) \
do { \
int n = yyr2[yyn]; \
int i; \
yyval.nb_links = n; \
yyval.links = malloc(sizeof *yyval.links * yyval.nb_links); \
yyval.str = NULL; \
yyval.type = yytname[yyr1[yyn]]; \
for (i = 0; i < n; i++) { \
yyval.links[i] = malloc(sizeof (YYSTYPE)); \
memcpy(yyval.links[i], &yyvsp[(i + 1) - n], sizeof (YYSTYPE)); \
} \
} while (0)
en activant le debug, YY_SYMBOL_PRINT est appelé à chaque réduction, et le YY_SYMBOL_PRINT ainsi redéfini construit l'abre syntaxique (yyval, variable interne de yacc est de type YYSTYPE c'est à dire de type tree_t)
conclusion : j'aurais pu près chaque ligne de la grammaire rajouter un appel à construire_noeud(fils1,fils2,fils3...) et stocker le noeud ainsi créé dans le yyval, mais ici j'ai trouvé un moyen d'éviter ça même si le résultat est le même
17 janv. 2010 à 19:08
Apparemment, gcc est construit avec yacc. Il a donc récupéré le fichier yacc (visible dans les sources de gcc), et fait un hook pour intercepter les actions et en ajouter une. (différence hook / hack, je ne sais pas, à voir sur google).
Cordialement, uaip.
17 janv. 2010 à 17:37
Tout d'abord très bonne source.
Deuxièmement, je voulais savoir comment vous aviez fait pour modifier la grammaire yacc du parser de GCC.
Vous dites l'avoir fait avec un "hack", c'est à dire ?
Merci d'avance
LandTech
21 juil. 2009 à 23:35
N'utilisant pas cygwin mais minGW, j'ai trouvé une "solution", visible ici si ça vous intéresse (ça prend 30sec de lecture :)) : http://www.cppfrance.com/forum/sujet-UTILISATION-FLEX-BISON-DANS-APPLICATION-GRAPHIQUE-WINDOWS-API_1338262.aspx
Bonne continuation.
21 juil. 2009 à 15:22
n'hésitez pas à me rendre compte de vos expériences problèmes avec ce parseur
16 juil. 2009 à 18:38
Avec quelles versions de yacc et lex avez-vous obtenu les .c et .h (version linux ou windows) ? Si windows, quelles lib(s) avez-vous utilisée(s) ?
Je m'explique : j'ai créé un projet avec flex/bison et utilisé libfl.a pour compiler les .c et .h générés. En projet sous console, ça fonctionne, mais pas en projet win32 (GUI). C'est en incluant la lib que j'obtiens l'erreur.
Beau boulot, sinon :)
Dans l'attente de votre réponse.