トップページ > プログラム > 2014年03月25日 > GAMZ9k7g

書き込み順位&時間帯一覧

31 位/256 ID中時間01234567891011121314151617181920212223Total
書き込み数1000000000000000000000203



使用した名前一覧書き込んだスレッド一覧
jonigata
「コンパイラ・スクリプトエンジン」相談室15

書き込みレス一覧

「コンパイラ・スクリプトエンジン」相談室15
851 :jonigata[]:2014/03/25(火) 00:03:25.96 ID:GAMZ9k7g
ebnfブランチ github.com/jonigata/caper/tree/ebnf で
EBNFを実装してみた(C++ジェネレータのみ)ので暇な人いたら人柱募集。
使い方はsamples/cppのlist0, list1, list2, optionalを参考のこと。

list2のスラッシュオペレータは独特のやつで、
X/Yと書くと X Y X Y XにマッチしてYを捨ててXのリストを返す。
引数リストなどに使う目的で作った。
カッコは役に立つところが思いつかないので実装してない
(今のところ実装する気もない)。
というか実用的な言語ではスラッシュ以外ほとんど使うところないと思ってる。

出力されるパーサ・ジェネレータのソースはより読みやすくなったはず。
「コンパイラ・スクリプトエンジン」相談室15
853 :jonigata[]:2014/03/25(火) 22:09:52.29 ID:GAMZ9k7g
とりあえずイテレータ対とかboost::optional的なものを返すようにしてみたよ。
それをどう使うかはセマンティックアクション側で勝手にしてね、的な。

template <class S>
int Document(const S& x) {
for(typename S::const_iterator i = x.begin();i!=x.end();++i) {
}
return 42;
}

こんな感じで受ける。
なぜかrange-based forは使えなかった。
返すイテレータの実装が悪いのかな?
誰かに添削して欲しい。
「コンパイラ・スクリプトエンジン」相談室15
854 :jonigata[]:2014/03/25(火) 22:12:36.54 ID:GAMZ9k7g
あ、気のせいだった。普通に使えた。

template <class S>
int Document(const S& x) {
for (const auto& y: x) {
}
return 42;
}

これで受けれる。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。