10/09
&&演算子と||演算子を実現させるため、CコンパイラのBNF記法をもう一度読み直しました。私が読んだC言語のBNFはK&Rで定義されているものだったため、それをC99に対応させる必要があるなと思いました。しかし、&&演算子と||演算子を実装するだけでは、そこまで問題ないのでとりあえずはおいておき、今はK&RのBNFを私のプログラムに対応させて行きました。 BNFはプログラムで実装しやすいように手を少し加えたり、EBNF記法で書いたりと変更しました。例えば以下のコードの内、上を下のように変換したりしました。
<conditional-expression> ::= <logical-or-expression>
| <logical-or-expression> ? <expression> : <conditional-expression>
<conditional-expression> = <logical-or-expression> ( "?" <expression> ":" <conditional-expression> )?
equality_expr = relational_expr | equality_expr ("==" | "!=") relational_expr
equality_expr = relational_expr (("==" | "!=") relational_expr)*
C言語のBNFを読むコツはstatement系, expression系, その他共通部分をまとめる系の3つに分類することです。これを意識することで、だいぶ理解が進みました。 また、&&と||を実装するにあたり、短絡評価というものを意識する必要性を知りました。&&であれば、左の式が偽なら、右は評価しない。||であれば、左の式が真なら、右は評価しないなどのことです。無事実装できました。
今日初めてオンライン英会話をしました。こんなに難しいのかと思いました。
10/15
高専間単位互換制度での石川高専の授業の試験が10月10日に終わり、気づけば15日で学校が始まってから2週間が過ぎました。早い…
自作CコンパイラはC99のBNFを解読し、プログラムに反映させようと奮闘しました。struct部分のBNFが非常に難しいです。難しくしている要因が、構造体の宣言と定義、参照とあるのですが、宣言と定義が同じBNFで処理されていたりとするからです。そのため、各パース用の関数の引数と戻り値が、node、type、identifierのどれが最適なのか考える必要がありました。また今までは配列や、ポインタなどの派生型もありますが、最終的に変数はint, charなどの基本型に収束していました。しかし構造体を実装するにあたり基本型だけでは終わらないことに築きました。構造体のメンバは基本型で構成されていますが、構造体変数のデータ型はユーザ定義のためです(用語の使い方があっているか怪しいですが..)。基本的なネストされていない構造体は実装することができました。アロー演算子も実装できました。より理解を深めるために、構造体のパース時の抽象構文木を図に書いてみたりしてみようと思います。
今日(2023/10/15)にセルフホストまでさせることを目標にしていましたが、目標達成できませんでした。めちゃくちゃ甘い計画だった… 今後はまず、2kmccというCコンパイラのコンパイルを目指して作成し、その後自分のプログラムをセルフホストさせてみたいと考えてます。
実は今週、一週間に一度しかスマホを充電してはいけないという縛りを設け生活しました。この縛りを設けた理由は、最近スマホに依存しすぎてはないかと。もう少し有意義に過ごせるのではないかと考えたからです。最終日の今日、スマホの電池残量は2%となんとか目標を達成しました。意識変革の第一歩となったと思います。今後も続けていきたいです。
Google Analytics と Google Serch Consoleにサイトの登録が完了しました。正常にインデックスにも登録できているみたいです。
現在会員のサーかるを部活化するかどうか、真剣に考えています。部活を作れば知名度が上がることはもちろん、予算ももらえます。人数を10人集めなければ行けないのですが、現在4人と…
頑張れば部活化することはできると思っているのですが、その部活が、継続するのかという疑問があります。継続するためにはどうするべきか等考えていきたいです。
最近思うことは、他人と比較せずに生きていくことができれば、随分と楽なのだろうということです。幸せを他人と比較して得るのではなく、自分が評価して得ることができるからです。
この比較せずに生きていきたいということはよく聞くことです。では具体的にどのようにすれば良いのでしょうか? 一つは自分が比較しないこと。もう一つは比較してくる人を近くに寄せないことではないかと思います。比較してくる人が近くにいると、せっかく決意したのに、心が揺れてしまいます。