compiler-inservice-s22 / Discussion

MIT License
0 stars 0 forks source link

關於visitor pattern的constant value #18

Open ChukaChiu opened 2 years ago

ChukaChiu commented 2 years ago

TA們好,

HW3我選擇使用visitor pattern, 觀察到src/lib/AST/AstDumper.cpp內註解提示TODO value欄位預設是string

void AstDumper::visit(ConstantValueNode &p_constant_value) {
    outputIndentationSpace(m_indentation);

    // TODO: string of constant value
    std::printf("constant <line: %u, col: %u> %s\n",
                p_constant_value.getLocation().line,
                p_constant_value.getLocation().col,
                "TODO");
}

但是ast_guideline.md定義output format為:

constant <line: {line_number}, col: {col_number}> {constant_value}

// format of constant value
integer: printf("%d", int_value);
real: printf("%f", real_value);

請問我們需要改動AstDumper支援不同constant value type嗎? 還是只要印出正確的值即可?

LittleLaGi commented 2 years ago

同學你好:

只要 make test 能跑出正確結果、而且有正確實作出 visitor pattern 就可以,其他細節不拘, 不過會建議用 union 來儲存目前的 constant node 的實際數值,需要印出的時候再轉成 C string 就好, 因為之後要做 code generation 的時候還是需要數值,我們之後給的程式碼就是這樣實作。


若以上回答有回答到同學的問題,請對助教的回覆加上 emoji 👍,助教會幫此 issue 加上「已解決」的標籤,感謝同學的配合。