Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OCamlでpfffを拡張した話      2012.11.24       nakyau
自己紹介twitter : @nakau職業 : webプログラマー活動: IT系勉強会、ビール関数型言語 : 趣味でF#,Scalaなど勉強中
祝 !!第2回関数型言語勉強会 大阪      http://www.flickr.com/photos/sjliew/1286367571
OCamlでpfffを拡張した話
pfffぷふ
コード解析ツール
https://github.com/  facebook/pfff/
構文grep/patch$ sgrep -e ‘foo()’ ././/tests/php/sgrep/foo.php:3 foo();.//tests/php/sgrep/foo.php:6 foo( ); // これもfoo();と同じ
対応言語PHP / Javascript / C / C++  Erlang / Python / Java   C# / Lisp / Scheme    Haskell / ml / Opa HTML / CSS / SQL / Tex
対応言語PHP / Javascript / C / C++ Erlang / Python / Java   C# / Lisp / Scheme   Haskell / ml / Opa HTML / CSS / SQL / Tex
構文grep/patch$ sgrep -e ‘foo()’ ././/tests/php/sgrep/foo.php:3 foo();.//tests/php/sgrep/foo.php:6 foo( ); // これもfoo();と同じ
拡張する言語
PIC(図形生成用DSL)
はじめてのOCaml
構文わからない      ググレカス       生没不詳
set -e; for i in ; do make -C $i all || exit 1; donemake[2]: Nothing to be done for `all.set -e; for i in ; do make -C $i ...
成果
lexer_pic.ml
$ ./pfff -helpUsage: pfff [options] <file or dir>Options are:   ...  -layer_stat <file>  -tokens_ml    <file>  -parse_ml  ...
$ ./pfff -tokens_pic tests/pic/foo.picTag4 ((".PS", (((".PS", 0, 1, 0, "tests/pic/foo.pic")), 0,0)))Tag2 (((("n", 3, 1, 3,...
まだ開発途中
感想   &   まとめ
プロジェクトに乗っかると勉強しやすい
トイプログラムからの脱却
プロジェクト参加推奨
pull requestしなければどうということはない
エア参加
免責事項
pfff 動かない
おしまい
ご清聴ありがとうございました
Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話
Ocamlでpfffを拡張した話
Upcoming SlideShare
Loading in …5
×

Ocamlでpfffを拡張した話

2,552 views

Published on

第2回 関数型言語勉強会 大阪の発表資料です。

Published in: Technology
  • Be the first to comment

Ocamlでpfffを拡張した話

  1. 1. OCamlでpfffを拡張した話 2012.11.24 nakyau
  2. 2. 自己紹介twitter : @nakau職業 : webプログラマー活動: IT系勉強会、ビール関数型言語 : 趣味でF#,Scalaなど勉強中
  3. 3. 祝 !!第2回関数型言語勉強会 大阪 http://www.flickr.com/photos/sjliew/1286367571
  4. 4. OCamlでpfffを拡張した話
  5. 5. pfffぷふ
  6. 6. コード解析ツール
  7. 7. https://github.com/ facebook/pfff/
  8. 8. 構文grep/patch$ sgrep -e ‘foo()’ ././/tests/php/sgrep/foo.php:3 foo();.//tests/php/sgrep/foo.php:6 foo( ); // これもfoo();と同じ
  9. 9. 対応言語PHP / Javascript / C / C++ Erlang / Python / Java C# / Lisp / Scheme Haskell / ml / Opa HTML / CSS / SQL / Tex
  10. 10. 対応言語PHP / Javascript / C / C++ Erlang / Python / Java C# / Lisp / Scheme Haskell / ml / Opa HTML / CSS / SQL / Tex
  11. 11. 構文grep/patch$ sgrep -e ‘foo()’ ././/tests/php/sgrep/foo.php:3 foo();.//tests/php/sgrep/foo.php:6 foo( ); // これもfoo();と同じ
  12. 12. 拡張する言語
  13. 13. PIC(図形生成用DSL)
  14. 14. はじめてのOCaml
  15. 15. 構文わからない ググレカス 生没不詳
  16. 16. set -e; for i in ; do make -C $i all || exit 1; donemake[2]: Nothing to be done for `all.set -e; for i in ; do make -C $i all || exit 1; doneocamlc -g -dtypes -thread -w +9 -w -21 -warn-error +a -I ../../commons -I ../../commons/ocamlextra -I ../../commons/lib-sexp -I ../../commons/lib-json -I ../../globals-I ../../h_program-lang -c test_parsing_pic.mlFile "test_parsing_pic.ml", line 15, characters 17-35:コンパイル通らないError: This pattern matches values of typeFile_type.file_type but a pattern was expected which matches values oftype File_type.pl_typemake[2]: *** [test_parsing_pic.cmo] Error 2make[1]: *** [rec] Error 1make: *** [all] Error 2
  17. 17. 成果
  18. 18. lexer_pic.ml
  19. 19. $ ./pfff -helpUsage: pfff [options] <file or dir>Options are: ... -layer_stat <file> -tokens_ml <file> -parse_ml <files or dirs> -dump_ml <file> -refactor_grammar <subst_file> <file> -parse_php <file or dir> -tokens_php <file> -parse_pic -tokens_pic <file> <file> ←追加できた!
  20. 20. $ ./pfff -tokens_pic tests/pic/foo.picTag4 ((".PS", (((".PS", 0, 1, 0, "tests/pic/foo.pic")), 0,0)))Tag2 (((("n", 3, 1, 3, "tests/pic/foo.pic")), 0, 0))Tag4 (("ellipse", ((("ellipse", 4, 2, 0, "tests/pic/foo.pic")), 0, 0)))Tag1 ((((" ", 11, 2, 7, "tests/pic/foo.pic")), 0, 0))Tag5 (("document", (((""document"", 12, 2, 8, "tests/pic/foo.pic")), 0, 0)))((((";", 22, 2, 18, "tests/pic/foo.pic")), 0, 0))Tag2 (((("n", 23, 2, 19, "tests/pic/foo.pic")), 0, 0))Tag4 (("arrow;", ((("arrow;", 24, 3, 0, "tests/pic/foo.pic")), 0, 0)))Tag2 (((("n", 30, 3, 6, "tests/pic/foo.pic")), 0, 0))Tag4 (("box", ((("box", 31, 4, 0, "tests/pic/foo.pic")), 0,0)))Tag1 ((((" ", 34, 4, 3, "tests/pic/foo.pic")), 0, 0))Tag5 (("fIgpicfP(1)", (((""fIgpicfP(1)"", 35, 4,4, "tests/pic/foo.pic")), 0, 0)))
  21. 21. まだ開発途中
  22. 22. 感想 & まとめ
  23. 23. プロジェクトに乗っかると勉強しやすい
  24. 24. トイプログラムからの脱却
  25. 25. プロジェクト参加推奨
  26. 26. pull requestしなければどうということはない
  27. 27. エア参加
  28. 28. 免責事項
  29. 29. pfff 動かない
  30. 30. おしまい
  31. 31. ご清聴ありがとうございました

×