次の構造を解析できるようにしたいと思います。
blah
{
"string-1",
"string-2",
...,
"string-n"
}
私はフレックスを使用してトークン化していますが、それは完全に機能しています。解析には 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 時間の経験があります)、手首を叩いて正しい方向を示すポインターがあれば最高です。
編集: これの目的は、外部アプリケーション用のテスト ハーネスを作成できるようにすることです。字句解析/解析は、ユーザーが提供するテスト スクリプトを解釈するために使用されます。1 つのコマンドで、ユーザーはアプリケーションにメッセージを送信できます。次に、複数行の応答を読み取り、ユーザーがスクリプトで提供した可変長の文字列リストと比較します。上に投稿したフラグメントは、考えられる応答をユーザーに定義させようと考えた方法です。
例えば:
blah
{
"COMMAND EXECUTED CORRECTLY"
}
また
blah
{
"QUERY COMPLETE IN .0034 SECONDS",
"1 RECORD FOUND:",
"FOO=12345",
"--END OF LIST--"
}