コンパイラを書くのは難しいか。仮説（175）coding(29)

C言語を勉強するために、学生または新人に話しているのは３つ。

１　C言語でコンパイラを書いてみる
　写経（まるうつし）でもよい。
２　好きな分野（ゲーム、音楽など）のプログラムを書いてみる。
　Cのソースが公開されているものにロードランナーがある。
　実際に、プログラムを打ち込んで、コンパイルしてコンパイルエラーとるだけで十分プログラミングできるようになった人あり。
３　他の言語で書かれたものをC言語に変換してみる。

電総研（現在の産総研）に研修生でいた３ヶ月で、

自分では、最初の１月で、Small Cという小さいCコンパイラを写経し、
次にPascalで書かれていたコンパイラをC言語に変換してみた。

次の１月で、Pascalで書かれたコンパイラをC言語に変換して失敗したのは、
デバッグモードだと動くが、デバッグーモードじゃないと暴走するという事態。

デバッグモードではprintして確認した。printして確認の課題は、printして確認すると期待通り動くが、printをしないと違う動きをする場合があることである。例えば、printするために確保した領域が、値の上書きや、時間の調整をしていて、時間的にも空間的にも期待した動作さけをする場合がある。printを消すと、OSや言語によっては、空間を壊したり、時間の順番が入れ替わることがあるかもしれない。

静的検査道具を知らずに、何ヶ月か悩んだ。
少しおおきくなるだけなのでデバッグモードでコンパイルしたもので使い続けた。

原因は、配列の検査がいいかげんで、どこかで飛び越えているのだろうと推測する。
デバッグモードだと、そこがデバッグのための領域で悪さをしないのだろうと。

最後の１月で、OBJという抽象データ型言語のシンタックスチェッカをC言語で作った。
もともとは、OBJの論文への意見を求められ、言語の特徴を知るのにシンタックスチェッカを作ろうと思ったから。

# まとめ(summary)
コンパイラを書くには、
１　目標がある。
２　好きなことに関連させる
３　期限を切る
のいずれかまたはどれもを試してみてください。

その後、C言語研修ではかならずCコンパイラを一度は書くように勧めてきた。

当初は３ヶ月といっていたが、最近は道具もそろってきて、３週間でコンパイラを書く若者が増えてきたような気がする。

C言語教育に１ヶ月かけるなら、そのうちの３週間はコンパイラを作らせるとよいというのが経験則。

つまらぬ文法なんか教えていないで、とっとコンパイラを書こう。

# Lode Runner
コンパイラをどうしても書きたくない人にはゲームの写経をお勧めしています。

Lode-Runnerで学ぶ実践C言語-ビー・エヌ・エヌ企画部
<img width="200" alt="51JaGIOM+4L._SL500_SX351_BO1,204,203,200_.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/51423/b5ed3b1c-7a32-519d-8cd8-49f8286cb9d3.jpeg">
https://www.amazon.co.jp//dp/4893690116

# The C Puzzle Book 
C Puzzle Book, Alan-R-Feuer
https://www.amazon.co.jp/dp/4877830294/ 第二版翻訳
https://www.amazon.co.jp//dp/4871487733/ 初版翻訳

Cパズルブック
改訂版,  Alan R. Feuer/アラン・R. フューアー   2000-12
<img width="200" alt="51QQZNVK6JL._SX374_BO1,204,203,200_-3.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/af2b3374-0e92-7fcf-b893-7f86d25e79d5.jpeg">

https://www.amazon.co.jp/dp/4877830294/
https://bookmeter.com/books/1357557
https://booklog.jp/item/1/4877830294

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

# 参考資料(reference)
心理学の本を読むよりはコンパイラ書いた方がよくね。仮説（34）
https://qiita.com/kaizen_nagoya/items/fa715732cc148e48880e

Cコンパイラ３種をdockerで 
https://qiita.com/kaizen_nagoya/items/77184cf005490d7579e6

C++/C コンパイルエラーを記録するとよい理由7つ
https://qiita.com/kaizen_nagoya/items/85c0e92b206883140e89

Qiitaに投稿するC, C++の書式例
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

「C++完全理解ガイド」の同意できること上位10
https://qiita.com/kaizen_nagoya/items/aa5744e0c4a8618c7671

C言語（C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a

MISRA C まとめ #include <misra_c.h>
https://qiita.com/kaizen_nagoya/items/f1a79a7cbd281607c7c9

MISRA-C 2012 Referenceに掲載している文献の入手可能性を確認
https://qiita.com/kaizen_nagoya/items/96dc8b125e462d5575bb

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

[C][C++]の国際規格案の例題をコンパイルするときの課題７つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

どうやって MISRA C Example Suiteをコンパイルするか
https://qiita.com/kaizen_nagoya/items/fbdbff5ff696e2ca7f00

プログラミング言語教育のXYZ 仮説（52）
https://qiita.com/kaizen_nagoya/items/1950c5810fb5c0b07be4

人生で影響を受けた本100冊
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

TOPPERSまとめ　#名古屋のIoTは名古屋のOSで
https://qiita.com/kaizen_nagoya/items/9026c049cb0309b9d451

Qiita-dockerお宝鑑定団
https://qiita.com/kaizen_nagoya/items/509e125263559b5aed5b

The C++ Standard Library: clang++とg++でコンパイルしてみた(まとめ):14件
https://qiita.com/kaizen_nagoya/items/9bdfaa392443d13e5759

C++17 - The Complete Guide clang++とg++でコンパイルしてみた(まとめ):4件
https://qiita.com/kaizen_nagoya/items/c000f307e642990781e1

C++N3242, 2011, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010

C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

## 一覧
物理記事　上位100
https://qiita.com/kaizen_nagoya/items/66e90fe31fbe3facc6ff

量子(0) 計算機, 量子力学 
https://qiita.com/kaizen_nagoya/items/1cd954cb0eed92879fd4

数学関連記事１００
https://qiita.com/kaizen_nagoya/items/d8dadb49a6397e854c6d

言語・文学記事　１００
https://qiita.com/kaizen_nagoya/items/42d58d5ef7fb53c407d6

医工連携関連記事一覧
https://qiita.com/kaizen_nagoya/items/6ab51c12ba51bc260a82

自動車　記事　１００
https://qiita.com/kaizen_nagoya/items/f7f0b9ab36569ad409c5

通信記事１００
https://qiita.com/kaizen_nagoya/items/1d67de5e1cd207b05ef7

日本語（０）一欄
https://qiita.com/kaizen_nagoya/items/7498dcfa3a9ba7fd1e68

英語(0) 一覧
https://qiita.com/kaizen_nagoya/items/680e3f5cbf9430486c7d

転職(0)一覧
https://qiita.com/kaizen_nagoya/items/f77520d378d33451d6fe

仮説（0）一覧（目標100現在40）
https://qiita.com/kaizen_nagoya/items/f000506fe1837b3590df

Qiita(0)Qiita関連記事一覧（自分）
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6

鉄道（０）鉄道のシステム考察はてっちゃんがてつだってくれる
https://qiita.com/kaizen_nagoya/items/26bda595f341a27901a0

安全（0）安全工学シンポジウムに向けて: 21
https://qiita.com/kaizen_nagoya/items/c5d78f3def8195cb2409

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎　OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧 error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding(0) Rules, C, Secure, MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

プログラマによる、プログラマのための、統計(0)と確率のプログラミングとその後
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

Python(0)記事をまとめたい。
https://qiita.com/kaizen_nagoya/items/088c57d70ab6904ebb53

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

「はじめての」シリーズ　 ベクタージャパン　
https://qiita.com/kaizen_nagoya/items/2e41634f6e21a3cf74eb

AUTOSAR(0)Qiita記事一覧, OSEK(75)
https://qiita.com/kaizen_nagoya/items/89c07961b59a8754c869

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

LaTeX(0) 一覧　
https://qiita.com/kaizen_nagoya/items/e3f7dafacab58c499792

自動制御、制御工学一覧（０）
https://qiita.com/kaizen_nagoya/items/7767a4e19a6ae1479e6b

Rust(0) 一覧　
https://qiita.com/kaizen_nagoya/items/5e8bb080ba6ca0281927

小川清最終講義、最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951e35e6a53

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.
#### 文書履歴(document history)
ver. 0.01 初稿 20190828 朝
ver. 0.02 参考資料追記 20190828 午前
ver. 0.03 参考資料追記 20210722
ver. 0.04 参考資料追記 20221023
ver. 0.05 URL追記　20230228
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.