Bison Yacc/野牛父规则
在Yacc/Bison中,我如何知道父规则以便采取相应的行动 例如:Bison Yacc/野牛父规则,bison,yacc,Bison,Yacc,在Yacc/Bison中,我如何知道父规则以便采取相应的行动 例如: Module :ModuleName "=" Functions Functions :Functions Function | Function Function : DEF ID ARGS BODY { /* here, I would like to identify the parent rule and do something like this
Module
:ModuleName "=" Functions
Functions
:Functions Function
| Function
Function
: DEF ID ARGS BODY
{
/* here, I would like to identify the parent rule and do something like this*/
if ($parent_rule == "Module") {
/* take some actions */
} else {
/* this means the Function is matched recursively from the Functions rule. */
}
}
LR(1)解析器是自底向上的。当给定产量减少时,“父规则”尚不清楚
在任何情况下,您的产品<代码>功能<代码>仅在<代码>功能<代码>的上下文中减少,尽管有两种可能的产品可能适用
当然,确定哪种产品适用于产品本身没有问题。所以人们通常会这样做:
%type <FunctionList> Functions
%type <FunctionDef> Function
...
%%
...
Functions
: Functions Function
{ $$ = $1;
$$.append($2);
}
| Function
{ $$ = newFunctionList();
$$.append($1);
}
Function
: DEF ID ARGS BODY
{
$$ = newFunctionDef($2, $3, $4);
}
%类型函数
%类型函数
...
%%
...
功能
:功能
{ $$ = $1;
$$追加(2美元);
}
|作用
{$$=newFunctionList();
$$追加(1美元);
}
作用
:DEF ID ARGS BODY
{
$$=newFunctionDef($2,$3,$4);
}
LR(1)解析器是自下而上的。当给定产量减少时,“父规则”尚不清楚
在任何情况下,您的产品<代码>功能<代码>仅在<代码>功能<代码>的上下文中减少,尽管有两种可能的产品可能适用
当然,确定哪种产品适用于产品本身没有问题。所以人们通常会这样做:
%type <FunctionList> Functions
%type <FunctionDef> Function
...
%%
...
Functions
: Functions Function
{ $$ = $1;
$$.append($2);
}
| Function
{ $$ = newFunctionList();
$$.append($1);
}
Function
: DEF ID ARGS BODY
{
$$ = newFunctionDef($2, $3, $4);
}
%类型函数
%类型函数
...
%%
...
功能
:功能
{ $$ = $1;
$$追加(2美元);
}
|作用
{$$=newFunctionList();
$$追加(1美元);
}
作用
:DEF ID ARGS BODY
{
$$=newFunctionDef($2,$3,$4);
}