Я хотел бы иметь возможность проанализировать следующую структуру:
blah
{
"string-1",
"string-2",
...,
"string-n"
}
Я использую flex для токенизации, и это отлично работает. Я использую yacc (бизон) для разбора.
Какой рекомендуемый способ разрешить эту структуру? Прямо сейчас, в моем файле test.y, у меня есть:
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);
}
Я подозреваю, что strcat () - действительно очень плохая идея. Я настоящий новичок, когда дело доходит до lex / yacc (около 3 часов опыта), так что удар по запястью и указатель в правильном направлении было бы здорово.
РЕДАКТИРОВАТЬ: Цель этого состоит в том, чтобы позволить мне создать тестовый комплект для внешнего приложения. Лексинг / синтаксический анализ будут использоваться для интерпретации тестового сценария, который предоставляет пользователь. Одна команда позволяет пользователю отправить сообщение приложению, затем я читаю многострочный ответ и сравниваю со списком строк переменной длины, которые пользователь предоставил в сценарии. Фрагмент, который я разместил выше, - это то, как я решил дать пользователю возможность определить возможный ответ.
Например:
blah
{
"COMMAND EXECUTED CORRECTLY"
}
или
blah
{
"QUERY COMPLETE IN .0034 SECONDS",
"1 RECORD FOUND:",
"FOO=12345",
"--END OF LIST--"
}