Yacc/Bison で文法ファイルを次のように書くと:
Module
:ModuleName "=" Functions
{ $$ = Builder::concat($1, $2, ","); }
Functions
:Functions Function
{ $$ = Builder::concat($1, $2, ","); }
| Function
{ $$ = $1; }
Function
: DEF ID ARGS BODY
{
/** Lacks module name to do name mangling for the function **/
/** How can I obtain the "parent" node's module name here ?? **/
module_name = ; //????
$$ = Builder::def_function(module_name, $ID, $ARGS, $BODY);
}
そして、このパーサーは次のようなコードを解析する必要があります。
main_module:
def funA (a,b,c) { ... }
私の AST では、「funA」という名前を に変更する必要がありますmain_module.funA
。Function
しかし、パーサーがノードを処理している間、モジュールの情報を取得できません!
この問題を処理するのに役立つ Yacc/Bison 機能はありますか? または、このような恥ずかしい状況を避けるために解析スタイルを変更する必要がありますか?