電卓プログラム作成の補足
専攻科実験で、「字句解析と構文解析で電卓プログラムを作ろう」というネタを実施中。
サンプルプログラムを見せて、課題の1つが「式を読みやすくするための空白が使えるように改良」としているが、学生さんより、『最初に空白を全部消してから処理するのはアリ?』との質問。
ひとまずは動くプログラムをつくってくれればいいけど….
でも、空白を先に全部消してから、トークン切り出しをやると、色々とトラブルが起こる。
((例1)) x=-1 ; 昔、私が学生の頃に使ったCコンパイラは、"+="演算子を、 "=+"と書いても良かった。だから、"x -= 1"と誤認され、 プログラムがバグった。この経験以降、代入文の"="の前後 とかややこしい演算子の式で、空白を適所に打たないヤツは シロウト判定している。 今回の質問のように、空白を除去してから字句解析を行うと、 "x = -1"と誤認されないように空白を入れあっても、 "x -= 1"に誤認される。 ((例2)) C++でのテンプレートクラスでは、<>の中に型を 書いたりするけど、Foot<int>といった型も 出てくる。んで、<>の中にテンプレートクラス が出てくると、Foo< Bar<int> > といった 型を使う場合がある。でも、空白除去後に字句解析をすると、 Foo<Bar<int>>となり、右シフト演算子になる。 → C++03 から C++11 での仕様の変化 ・C++03までは、テンプレートの">"の前後には空白を入れるべき。 ・C++11からは、"<"のトークンの数で">>"でも区別してくれる。
一般県道福井鯖江線・石田家久停車場線が完成
高専近くの白鬼女橋と武生商業高校付近をつなぐ「一般県道福井鯖江線・石田家久停車場線」が11月12日に完成し通過ができるようになった。これで越前市方面から高専への便利な道が完成となった。
しかしながら、今朝子供を高校に送る際、早々にも渋滞してる。これからは、もう5分早く出なければ….。雪も積もるようになったら、さらに渋滞するだろうな…。