Vous aurez besoin de concaténer tous les arguments en une grande chaîne, en insérant des espaces entre eux. Ensuite, alimentez le tampon de texte restant en Lex/Yacc en redéfinissant la macro YY_INPUT
afin qu'elle lise les entrées de votre tampon de texte.
Le départ pourrait être quelque chose comme:
#include <stdio.h>
#include <string.h>
char *argbuf;
size_t arglen;
int main(int argc, char *argv[])
{
int i;
// Compute total length of all arguments, with a single space between.
arglen = 0;
for(i = 1; argv[i] != NULL; i++)
arglen += 1 + strlen(argv[i]);
// Allocate buffer space.
argbuf = malloc(arglen);
if(argbuf == NULL)
{
fprintf(stderr, "No memory for argument buffer, aborting");
exit(1);
}
// Concatenate all arguments. This is inefficient, but simple.
argbuf[0] = 0;
for(i = 1; argv[i] != NULL; i++)
{
if(i > 1)
strcat(argbuf, " ");
strcat(argbuf, argv);
}
// Here we should be ready to call yyparse(), if we had implemented YY_INPUT().
return 0;
}
pourriez-vous s'il vous plaît dites-moi comment modifier YY_INPUT dans le cas ci-dessus j'ai mentionné. – ajai
@ajai: Suivez le lien, il montre un exemple. – unwind
je reçois ces erreurs lorsque j'essaye le code ci-dessus try.y: 8: erreur: erreur de syntaxe avant '{' jeton try.y: 10: erreur: 'c 'non déclaré ici (pas dans une fonction) try.y: 10: erreur: 'EOF 'non déclaré ici (pas dans une fonction) try.y: 10: erreur:' YY_NULL' non déclaré ici (pas dans une fonction) try.y: 10: erreur: ' buf 'non déclaré ici (pas dans une fonction) try.y: 10: avertissement: la définition des données n'a pas de type ou de classe de stockage try.y: 11: erreur: erreur de syntaxe avant'} 'jeton – ajai