2018/04/07 Nguyên lý ngôn ngữ lập trình中間試験
去る2018年4月7日(土)、Nguyên lý ngôn ngữ lập trìnhの授業後半においてKiểm tra giữa kỳ(いわゆる中間試験)が行われた。時間は65分間で、問題用紙の持ち帰りは禁止されている。「持ち帰った場合は0点とする」との但し書き付きであった。
しかしおまけとして一人1枚ずつわら半紙が配られた。今までの傾向から中間試験や期末試験でわら半紙が配られた場合、回収されず、仮に試験官に渡しても受け取りを拒否される。ということは、ここに問題を書き写して持って帰ればいいわけだ。これまで試験を受けた科目はすべて選択科目であったため、わざわざ手書きで写すほどのことでもなかったが、本科目は必修なので、仮に今期落ちても、来期以降で再履修する場合に備えて問題を控えておいた方がいい。というか本科目は再履修(および再々履修)の人数が多いので、落ちることも想定して保険をかけておくべきだろう。
本科目のアクティブ受講者40名中外国人は俺を含め2名。もう一人の彼に対しては問答無用で英語版が配られたが、俺に対しては「Vietnamese or English?」と聞いてきたので、迷わずEnglishと答えた。問題を書き写していて思ったのだが、何も一字一句同じに書く必要はなく、要点だけを日本語で書けばいいということに気が付いた。
I. Part one(以前出された課題1の評価式を利用すること)4点満点
1. RELOPによる正規表現で以下4つを表す方法を7文字以内で答えよ。
>=, <=, >, <
2. ANTRLによる正規表現で以下条件のパスワードを表せ。
4文字以上。
少なくとも数字1桁かつ文字1桁を含む。
〇いい例 123a, Ab2cg, m2Ncxd4
×ダメな例 1234(数字のみで文字がない), mnbcg(文字のみで数字がない), a?12x(?を使ってはいけない)
3. BNFによる正規表現
@, ^, ? で、優先度はそれぞれ小中大
演算子はINTである
4. 以下構文をANTRLを使って表せ。
struct vidu{
int a, b;
struct con{
float c;
float d;
} e:
}
ID identifer
COMMA ,
SEMI ;
II. Part two (6点満点)
5. 以下コード
class A {def accept(V:Visitor) = ......
と、書いているうちにつかれてきたので問題そのものはこの辺で。
内容としては、全体の4割が正規表現に関するもの。仕事で普段から秀丸やサクラエディタを使いこんでいる人であれば正規表現そのものは知っていても(ベトナムに来ると日本語環境がなかったりしてnotepad++やsublime textが一般的だが)、RELOP、ANTRL、BNFの3種類の違いを全部暗記するのは大変だ。残りの6割はプログラミング言語scalaに関する問題だが、はっきりいって授業自体が大変に分かりにくく、無料のscala攻略サイトを見た方がはるかに分かりやすい。自分の場合はドワンゴ社のサイトhttps://dwango.github.io/scala_text/が役に立った。