2019-06-01から1ヶ月間の記事一覧

コンパイラ作成(58) char*型の値を返す関数

今回の目標 引き続きchar*型のサポートを頑張るよ。 // char*型を返す関数の呼び出し char *answer() { // Answer to the Ultimate Question of Life, the Universe, and Everything return "forty-two"; } int main() { puts(answer()); } 今回はchar*型を…

コンパイラ作成(57) char*型の変数

今回の目標 簡単にできそうなところからこつこつと。 // char*型の変数 int main() { char *p = "Hello, World!"; puts(p); } char*型の変数だよ。引数と大して違わないから簡単だと思う。 statement 変数の宣言部をちょこちょこっと修正。 elsif kind == TK…

コンパイラ作成(56) char*型+int型の式

今回の目標 型をミックスした式のサポートを頑張るよ。 // char* + int int main() { int i; for(i = 0; i < 10; i = i + 1) puts("Hello, World!" + i); } 前々回、char*型をサポートしたけど、対応が不十分なとこがいくつもあった。で、今回少しだけ改善す…

コンパイラ作成(55) バグ修正

バグ いくつかテストをしてたらバグが見つかったよ。 // セミコロンがない int main() { sub() sub(); } int sub() { printf("sub\n"); return 0; } 関数コールの後ろのセミコロンが無い場合、コンパイラが異常終了しちゃってたよ。 modify_el ここを修正。 …