niszetの日記

10年目エンジニアが最近勉強したことを忘れないようにメモをする

自作パーサを作る(つくった)お話

昔話。

異動前の部署ではなんかやたら忙しくって、去年は色々と試行錯誤していました。
新規に書くネタがないからではないですが、ちょっと昔の話を書いていこうかと。

チェッカを作る。

当時・・・と言っても今もだけど、いろいろなものが目視チェックに頼る仕組みとなっていました。まぁエンジニアの目は結構信用できるものです。人に依りますし、体調や気分にも影響を受ける。数をこなせば疲労がたまって集中が解けてミスも起こる。良くないことです。

そこで、自分でルールをまとめてチェッカを作れば良いのではないかと。そう思ったのです。それ以前も同様にやってきましたしね。
さらに、どうせやるならば新しいことをしよう。単なるperl1行野郎は卒業するぜ!と意気込んで、python+antlr4に行きついたのでした。

なお、本文中では構文解析、字句解析を区別せずにパーサと呼んでいます。本当は区別するべきところですが、語れるほど詳しくないので興味のある方は調べてみてくださいということで。

python3を使いたかった。

当時、python3を使い始めた私は適当に理由をつけてこれを使いたかった。別にrubyでも良かったのだが。

Pythonで扱えるパーサは例えばここで知ることが出来た。

qiita.com

開発が継続しているか?とか、機能が十分か?という点も気になったのですが、第一に「ルールファイルとプログラムを分けて書けることが出来る」という点に惹かれてAntlr4を選択したのです。

パーサって何。

当然何も知らないので、そもそも構文解析って何よってところから調べました。 その時は以下3冊を読みましたね。無道編はあまり読んでないのだけど。ふつコンは後半以降は読んでないです。コンパイラを作るわけではなかったのでね。

  • ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み
  • Rubyを256倍使うための本 無道編
  • The Definitive ANTLR 4 Reference

Antlr4については、

github.com

で結構見れるのですが、行間がやはりわからない。なので、やはり書籍で通して学ぶのは大事だなと思った次第です(まぁ全部は読めてないのですが)

書籍の内容をpython3で動かせるリポジトリはこちらにあるので参考になりました。 github.com

https://github.com/antlr/grammars-v4

やってみた。

ざっくり言ってしまえば「正規表現のようなものを積み上げていったもの」なので、文法がちゃんと決まっているもの、BN記法が公開されているものはその通り文法ファイル書けば大体動きました。が、先頭が0で始まってはいけない整数と0を許す整数などがうまく作り分けられず、結局は処理側で何とかしてしまいました。 この辺りはAntlrの仕様の理解が甘いのと、そもそもの構文解析に対しての理解が甘いからなのです。

とはいえ、自分の書いた文法ファイルでちゃんとパースされる様を見るのは楽しいです。本来の目的を忘れていますが。

文脈自由文法…白と黒のとびらを読んだのに細かいことは忘れました。

バッカス・ナウア記法 - Wikipedia

結果

上にも書いた通り、文法がはっきりしているものは良いのです。書けばよいので。 何かの「ログ」とかは文法はもとより、「今まで遭遇していないパタン」が来ると全然太刀打ちできません。

結局、ログは今まで通りperl/pythonで解析、文法がはっきりしていたものはパーサとして作りましたが、決め打ちで作ったperlの方が圧倒的に早かったので結局使っていないのでしたとさ。

いずれ…

Antlr4はverilogはパーサがあります。しかしSystemVerilogはないのです。verilogも特殊なものは入ってない。 なので、作ったら取り込んでもらえるかもしれません。svの仕様は一応全部公開されていたはずで…

github.com

技術書典の戦利品シリーズ

通勤時間を利用しての戦利品堪能

技術書だから、電車内で読んでも問題ないです。やったね! なお、一部の表紙。

Machine Learning in Business

去年から機械学習関係で情報発信している方をツイッタでフォローして最新の情報を追っていたのですが、その中の一人のicoxfog417さんの技術書典にて2冊のうちの1冊。 機械学習そのものではなくて、その先、導入とか運用とかをどうするの?っていう点について書かれています。 本文中にも書かれていましたが、機械学習だからといって特別なことはなく、割と基本に忠実に運用するようにしなくてはならないのですね。 今のところ機械学習の導入予定はないんだけど、将来に向けてよく覚えておかねば… あとがきの、「言語による情報の格差は加速度的に大きくなっています」のくだりは本当にそう思うのです。論文も基本的に英語だしね。

もう一冊のSignalは明日…日付変わって今日か。読んでいきます。実践もね。 日付変わってしもた……

技術書典に行ってきました。

技術書典2 in アキバスクエア

ぜんたい

今日はあいにくの天気ではありましたが、大盛況の技術書典に行ってまいりました。 ツイッタで見た範囲で、3000人超の入場者だそうです。ご飯食べて返ってきた人もいるかもだけど、このテーマでこの人数はやはりすごいですよね。秋葉原だからこその集客なのかしら。 開場すぐに行こうと思ったら既に長蛇の列で、ちょっと捌けたら行きますか~と思っていたら列が伸びていたので観念して並ぶことにしましたが、並んだのは30分くらいかなぁ? スタッフの方々が手馴れていて、雨は結構降っていたものの、大きな混乱もなく平和に終わったことと思います。スタッフの方々、本当にお疲れ様でした。

買ったもの

たくさん…(汗 しかし、帰ってから買ってないものや、ツイッタを見て気になったもの、など、色々とやり残し感があるのでした。 次は超会議らしいですが、そっちはいかないので、来年の技術書典3を楽しみに待ちますか。今のうちからチェックしておこ・・・

買ったもの、読んだものは追って記事を書こうと思います。

思ったこと

アナログ系は少ないですね~。無理もないですが。そもそもハード系よりはソフトの方が多い。 ハード寄りの人こそこういうお祭りに参加してほしいな。お客さんに、結構歳いった方がいて、あぁこれはエンジニアですわ…と思ったものです(確認はしていない)

やはりとっつきやすそうなところは盛況になりますね。あとタイトルとか、表紙とか、装丁とか。色々と参考になります。 いずれは出す側で参加したいな~。仕事と直接関係ないことなら良いよね・・・

お勉強

Rで学ぶ統計学入門

ようやく1周目読了。後半は駆け足だったけども…。t検定以降は2周目として手を動かしてみます。

比較的易しい内容に留めつつも、分散分析やベイズ統計まで触れていて、Rのスクリプトで手を動かしてみることが出来、最近の情報を取り込んでいる(この方法はすでに古い、など書かれている)、など、まだまだ初学者を脱せない私にはとてもありがたい1冊です。しばらくはこの本で勉強していると思います。

パーフェクトR

こちらも時系列分析の章だけ一読。 Rは関数の存在を知るのが難しい気がするので、かなり広範囲にわたって解説されているこの本はとてもありがたいのです。まだ全然読めてませんけど…。

Deepではない

Deep Leaning界隈は毎週毎週情報が沢山出てきますね。追いかけていくだけでも厳しい。 なので、TOPICのみを追うことにして、基本となる機械学習の考え方や数学を主に身につけることとしました。SVMくらいまではわかるように(大変)

CppSim + Python

そういえば、CppSimはPythonのI/Fを持っていたはず。しかし日本語で検索するとヒットしない。LTSpice+Pythonも。このあたりが狙い目かな。

トランジスタ技術3月号付録 アナログウェア No.1

トラ技

仕事の内容的に、CQ出版様には1読者として非常にお世話になっている。
そんなCQ出版の代表的な雑誌がトランジスタ技術、通称トラ技、ですが、3月号の付録が非常に自分的には良かったのでメモ。

内容

タイトルが高速通信時代!水晶振動子の選び方と使い方という、XTAL Oscillatorについてでした。
回路設計ってなんでもそうなんだけど、「数値上とれる解の範囲の中で、何を優先するべきなのか?数値上出てこないような効果・副作用はないか?」がある程度経験を積まないとわからないんですよね。前の設計があればそれを参考にするんですが、新規に作成する際や、以前がへっぽい設計の場合などは全部サラから考える必要があります。

この付録、70ページほどの冊子に詰められるだけノウハウを詰めてくれた感じに思えます。疑問に思っていたことがかなり消化できました。
負荷容量の値の選び方、ダンピング抵抗を入れる意味などなど。

冊子…

コレ、単行本化してくれないかなーって思うんですが、内容がかなりマニアックすぎて難しいんでしょうか…
続巻?のNo.2は6月号の付録になるようですね。特集は「ギガビット高速シリアル伝送用コネクタの選び方と使い方」。なんという人を選ぶ内容でしょう…私的には非常にOKなのですが。

トラ技Specialに焼き直していただいても良いのですよ~
って感想送ってみますかね…

書き始める。

去年、とりあえずブログのアカウントだけ作って放置していましたが、年度の変わりにあわせて始めてみようと思います。
テーマは特にコレと決めずに色々書いていこうかな、と。そろそろまともに文章書けるようにするという練習もかねて。

最近はR使いを目指しているので、調べたこと疑問に思ったことなどを書いてみます。

R使い始め

履歴を調べると去年の7月ごろから使い始めたようです。当時はRの文法がとっつきにくく、「RStudioではじめるRプログラミング入門」を買って一通り読みました。コードの写経はしなかったかな。ネットでも色々調べることはできるのですが、やはり最初の一歩は良い入門書があるとなお良いです。

その後、奥村先生の「Rで楽しむ統計 (Wonderful R 1)」を読んだり紆余曲折し、今年に入ってから「R for Data Science: Import, Tidy, Transform, Visualize, and Model Data」を読み始めて今に至る。この辺はまたどこかで書こう。

統計のお勉強

統計は統計で2009年に「完全独習 統計学入門」を購入、「データ解析のための統計モデリング入門」を2013年に購入してそれぞれ独習しました。
ただ、2013年時点ではRを触ろうとは思わなかったようです。触れよ・・・。

きっかけ

アナログ回路設計では製造ばらつきを考えるためにモンテカルロシミュレーションを行うので、その理解のために統計を勉強しよう…となったのが事の始まりでした(たぶん)
久保先生のモデリングの本は、たぶん回路特性をモデリングしたかったんだろうな、と。今はちょっとだけやっていますが当時はRという道具を使えなかったのでほぼ読んだだけですね。そろそろ再読したい時期。

最近のトピック

  • 分散分析
    t検定まではなんとか理解できてきたんだと自分では思っているのですが、問題は分散分析。というよりは効果量について。
    差異があることは検定するまでもなくわかっているので、その効果を定量的に見たいのです。最小二乗法でフィッティングして、信頼区間なんて知らないです~得られたデータから出したせんだから最尤なんです~で良いのなら良いのですけどね(実際、そんな感じになっている)
    これをもうちょっとちゃんと統計のお作法に則ってやってみようということです。

  • 時系列分析 時系列系は結構毛色が違うので別途勉強することに。状態空間とかも。カルマンフィルタはちょっとだけ勉強しましたが…まだまだ…

  • 機械学習 いわずと知れた…。今また次のステップに行こうとしている気がしますね。とりあえず乗っかっておかないと…

  • その他 ほかにも色々やろうとしていることはありますが、発散するのでまずはここまで。