Je voudrais pouvoir analyser la structure suivante:Permettant la liste de longueur variable dans yacc
blah
{
"string-1",
"string-2",
...,
"string-n"
}
J'utilise flex à tokenizer, et qui fonctionne parfaitement. J'utilise yacc (bison) pour l'analyse.
Quelle est la méthode recommandée pour autoriser cette structure? En ce moment, dans mon dossier de test.y, j'ai:
blah_command:
BLAH OPEN_BRACE string_list CLOSE_BRACE
{
printf("String list is %s\n", $3);
}
string_list: /* empty */
|
STRING
{
return $1;
}
|
STRING COMMA string_list
{
strcat($1, ",");
strcat($1, $3);
}
Je soupçonne que strcat() est vraiment, très mauvaise idée. Je suis un vrai novice quand il s'agit de lex/yacc (environ 3 heures d'expérience) donc un claquement sur le poignet et un pointeur dans la bonne direction serait génial.
EDIT: Le but de ceci est de me permettre de construire un faisceau de test pour une application externe. Le lexing/parsing sera utilisé pour interpréter un script de test fourni par l'utilisateur. Une commande permet à l'utilisateur d'envoyer un message à l'application, puis je lis la réponse multiligne et la compare avec la liste de longueur variable des chaînes que l'utilisateur a fournies dans le script. Le fragment que j'ai posté ci-dessus est la façon dont j'ai pensé que je laisserais l'utilisateur définir la réponse possible.
Par exemple:
blah
{
"COMMAND EXECUTED CORRECTLY"
}
ou
blah
{
"QUERY COMPLETE IN .0034 SECONDS",
"1 RECORD FOUND:",
"FOO=12345",
"--END OF LIST--"
}
Cela a du sens. Je vais poursuivre ça ... – Andrew