2009-09-01から1ヶ月間の記事一覧

ハノイの塔

Coq

久しぶりにCoqで遊ぼうかと思って、いい問題はないかと考えたところ、ハノイの塔あたりが面白いんじゃなかろうかということで証明してみた。証明したいことはハノイの塔を完成させる最短手数は2^n-1であること…と思って少し書いてみたんだけど、これはかなり…

ちょっと読んでみた

ちょうど読みたかった内容の入門書で薄くて楽そうだったのが明倫館にあったから読んでみてるのだが、この本はだめだ……とりあえず層の定義より前の部分(関数論と位相と多様体の定義の復習)はさらっと読めて、層の定義からが知らない内容なんだけども誤植と非…

連休に頑張って書いたコード

C++

http://github.com/kik/cpppeg に置いた。 http://wiki.github.com/kik/cpppeg/usage 説明はここ。 まだ色々と不完全

大量の意味不明なエラーメッセージと格闘した結果

C++

今回のターゲット文法は epxr ::= int_lit | '(' op expr expr ')' int_lit ::= token(int_lit_s) op ::= token(op_s) int_lit_s ::= digit digit* op ::= alpha alpha* token(T) ::= T ' '*token(T)はジェネリックなルールであり、Tに対してTの後ろの空白文…

C++で再帰下降パーザライブラリ

C++

再帰下降パーザを書くだけなら誰でもできることなのだが、本当に一日中悩んでやっと低機能なものが動くようになった。 最終的にはPEGをサポートしたいところである。たとえば <hoge> ::= alpha alpha digit <foo> <foo> ::= digitなんて文法があったら #include <iostream> #include "p</iostream></foo></foo></hoge>…

C++

struct X { typedef int Y; }; struct Y { struct Z { X foo(); }; }; struct Z { X::Y foo(); }; X::Y::Z::foo() { return 0; } これだと、最後の関数定義は X::Y (::Z::foo)();を定義してるのね

C++の文法が複雑すぎて分からない

C++

struct X { struct Y { struct Z { }; }; }; struct Y { struct Z { X foo(); }; }; struct Z { X::Y foo(); }; X::Y::Z foo(); X::Y::Z::foo() { return 0; } 最後の関数定義はいったいどの関数を定義しているのだろう…。C++の仕様書の生成規則だと X::Y::Z…