0
我正在编写一个编译器,并且我有用于处理无限嵌套if语句的工作代码,但它有点破解。我不知道这样做是否安全?这是对Bison的安全编程吗?
con_statement:
IF exp DO
{
$1 = ifNum++;
if($2 == BOOLEAN_TYPE || $2 == INTEGER_TYPE)
{
utstring_printf(code, "\tpop\teax\n");
utstring_printf(code, "\tcmp\teax, 0\n");
utstring_printf(code, "\tje\tIF_END_%d\n", $1);
}
if($2 == FLOAT_TYPE)
{
utstring_printf(code, "\tnop\n");
}
}
program FI
{
utstring_printf(code, "IF_END_%d:\n", $1);
}
;
你在担心什么?标签生成?代码生成?规则的“程序”部分?目前还不清楚你如何处理ELSE条款......也许这并不重要,但它通常是这样。 –
说$ 1 = LABELNUM并输入终端对我来说似乎是一个糟糕的混乱?对不起,我忘了完成输入, – SetSlapShot
由于默认操作是设置'$$ = $ 1;',使用'$ 1'这样的默认操作可能会产生分支上游,但它不应该影响Yacc代码 - 只是您的任何操作看着'con_statement'返回的值。我认为创建一种机制将标签号与当前结构关联起来更为传统。我认为你在做的是非常规的。它认为它可能会在以后对你产生影响。但我认为它不会打破Yacc本身。 –