入力したコマンドを解析できる小さなコンパイラを作成しようとしています。
解析しようとするコマンドは次のとおりです。
create class something = create class do_something ;
私のコードは次のようになります。
grammar : my_grammar
{
list<Class1 *> *obj = new list<Class1 *>;
obj->push_back($1);
}
my_grammar : my_definition SEMICOLON
{
report("something detected!");
$$ = $1;
}
my_definition : CREATE CLASS class_name EQU class_expression
{
$5->setClassName(*$3);
$$ = $5;
}
class_expression : CREATE CLASS operand_name
{
$$ = new OperandClass();
$$->setOperationType("createClass");
$$->setOperandName(*$3);
}
ただし、パーサーを別の場所で呼び出そうとすると、Class
以前に定義した を取得できません。
パーサーに何か問題があり、GDB でデバッグを行ったに違いないと思います。しかし、関数に足を踏み入れることはできずpush_back()
、情報をobj
正しく出力することもできません。
そのため、 GDB の使用中$$
または使用中に値を取得できる方法があるかどうか疑問に思っています。$1
入力するだけで、別のp $$
ものが出力されます。