J'aimerais être capable d'analyser la structure suivante :
blah
{
"string-1",
"string-2",
...,
"string-n"
}
J'utilise flex pour tokeniser, et ça marche parfaitement. J'utilise yacc (bison) pour l'analyse syntaxique.
Quelle est la méthode recommandée pour autoriser cette structure ? Pour l'instant, dans mon fichier 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 pense que strcat() est une très, très mauvaise idée. Je suis un vrai novice en ce qui concerne lex/yacc (environ 3 heures d'expérience), alors une tape sur le poignet et une indication dans la bonne direction seraient les bienvenues.
EDIT : Le but est de me permettre de construire un harnais de test pour une application externe. Le lexing/parsing sera utilisé pour interpréter un test script que l'utilisateur fournit. Une commande permet à l'utilisateur d'envoyer un message à l'application, puis je lis la réponse de plusieurs lignes et je la compare avec la liste de longueur variable de chaînes de caractères que l'utilisateur a fournie dans le script. Le fragment que j'ai posté ci-dessus est la façon dont j'ai pensé laisser 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--"
}