0
저는 컴파일러를 작성 중이며 무한히 중첩 된 if 문을 처리하기위한 코드가 있지만 해킹과 같은 문제가 있습니다. 이 일을하는 것이 안전한지 나는 모른다.들소에 대한 안전한 프로그래밍인가요?
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'을 (를) 사용하여 dinking하면 업스트림에 영향을 미치지 만 Yacc 코드에는 영향을 미치지 않습니다. 그것은'con_statement'에 의해 반환 된 값을 봅니다. 레이블 번호를 현재 구문과 연결하는 메커니즘을 만드는 것이 더 일반적이라고 생각합니다. 네가하고있는 일은 독창적이라고 생각해. 나중에 그것이 당신에게 파급 효과를 줄 것이라고 생각합니다. 하지만 나는 Yacc 그 자체를 깨뜨리지 않을 것이라고 생각합니다. –