我希望能够解析以下结构:
blah
{
"string-1",
"string-2",
...,
"string-n"
}
我正在使用 flex 进行标记,并且效果很好。我正在使用 yacc (bison) 进行解析。
允许这种结构的推荐方法是什么?现在,在我的 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--"
}