スキャナ(scanner)のプログラムにおいて「make src」が通るように改造せよ。(UNKNOWNが出ないように、出来る限りの処置を施し、当該のrexp.lexを入りつけてください。)
rexp.lexの断片
[/*].*[*/] { return(COMMENT); } [a-zA-Z_][a-zA-Z0-9_]* { return(ID); } [0-9]+ { return(INTEGER); } [0-9]+"."[0-9]+"f"* { return(REAL); } ";" { return(SEMICOLON); } "," { return(COMMA); } "=" { return(EQUAL); } "+" { return(ADD); } "-" { return(SUBTRACT); } "*" { return(MULTIPLY); } "/" { return(DIVIDE); } "(" { return(LPAR); } ")" { return(RPAR); } "{" { return(LBRACE); } "}" { return(RBRACE); } "\'" { return(SINGLEQUOT); } "\"" { return(DOUBLEQUOT); } "&" { return(ANPER); } "|" { return(VERTICALBAR); } "%" { return(PERCENT); } "#" { return(NUMBERSIGN); } "\\" { return(BACKSLASH); } "." { return(PERIOD); } "\r"|"\n"|" "|"\t" { } . { return(UNKNOWN); }
LEXERに関する補足
今回の字句解析器の字句は、こちらを参考にしながら命名しています。そして上のrexp.lexに関して、字句として判別するべき特殊文字は他にもありますが、仕様はないので、今回はsrc.txtに対応する特殊文字のみを扱っています。
その他、感想
字句解析
今回LEXERを使ってみて、自分で作った字句解析器では、さまざまな言語処理系を作ったときに字句解析器を新たに作らなくてはならないですが、レクサーではrexp.lexの部分を少し変えるだけで解析方式を返ることが出来るので、いろいろな場面で使える解析器だと思いました。また、解析時間においても、制御文によって判別した(自分で作った)字句解析器では0m0.003s、レクサーでは0m0.002sでした。効率的にも良いので、言語の字句解析器にはレクサーを使います。
数字で判断するか否か〜教員点問題〜
ある意味偏差値で数字するのは評価も自動化できて楽だとも思います。しかし世界のテクノロジーが発展していくためには、そんなものでは判断できないと思います。茂木健一郎さんは、ジャック・アンドレイカの「カーボンナノチューブで膵臓癌の早期発見検査薬」の話を加えて、こんなことおっしゃっていました。"もし君が、カーボンナノチューブで膵臓癌の早期発見検査薬を作りたいって思ったとする。それで、各大学に『こういう研究をしたいんです』って手紙を送ったとする。そのようなことをしてたら、日本の大学に受かるかな?"[1] 。答えは『いいえ』。これだと本当に研究したい人がいけず、いいところにとにかく就職したいと思う人しか大学に集まらない。ハーバード大学でも1時間〜2時間面接して選んでいるのに、日本はどうしたもんかと思います。また、周りでも成績が良いから、こいつすごい見たいな風習があり、確かにそれはそれですごいと思います。でも、僕は成績が普通でも面白いものを作る人だったり、面白い人の方がダントツに良いと僕は思います。
最後に教員点問題に関して会議のことだからか、周りの教員の人らは隠そうという動きがありますが、やはり生徒のことなのに、生徒に一切の発言権もなく決めるのは不公平だと僕も思います。