Parrot Compiler Tools

  • Published on
    18-Nov-2014

  • View
    3.793

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Transcript

  • 1. Parrot Compiler Tools Kazutake Hiramatsu kazutakehiramatsu@gmail.com 2008/05/15 YAPC::Asia 2008
  • 2. Introduction 2001 2005 Pugs 2006 Perl6 2008 Parrot version 0.6.1 Parrot is Dead ? 2008/05/15 YAPC::Asia 2008
  • 3. What is Parrot Compiler Tools (PCT) ? Parrot VM Rakudo PCT Parrot PCT 2008/05/15 YAPC::Asia 2008
  • 4. All Dynamic language is compiled into Parrot bytecode Perl6 Perl5 Ruby Python Parrot VM 2008/05/15 YAPC::Asia 2008
  • 5. All Dynamic language is compiled into Parrot bytecode Perl6 Perl5 Ruby Python Parrot VM 2008/05/15 YAPC::Asia 2008
  • 6. What is Parrot ? Register-based VM (Perl, Ruby etc) 4 (In, Nn, Sn, Pn) Parrot Intermediate Representation (PIR) Parrot Assembly language (PASM) 2008/05/15 YAPC::Asia 2008
  • 7. Parrot Registers Integers (I) Numbers (N) Strings (S) PMCs (P) Parrot Magic Cookies String,Array, Hash, Object 2008/05/15 YAPC::Asia 2008
  • 8. Parrot Registers I0 integer register #0 N1 number of floating point register #1 S2 string register #2 P3 PMC register #3 2008/05/15 YAPC::Asia 2008
  • 9. Parrot Assembly language (PASM) Parrot Parrot 2008/05/15 YAPC::Asia 2008
  • 10. Parrot Assembly language (PASM) set I0, 1 set S0, quot;Fooquot; set S1, S0 set S0, quot;Barquot; print S1 # Foo print S0 # Bar new P0, 'String' set P0, quot;Bazquot; print P0 # Baz end 2008/05/15 YAPC::Asia 2008
  • 11. Parrot Intermediate Representation (PIR) PASM PASM 2008/05/15 YAPC::Asia 2008
  • 12. Parrot Intermediate Representation (PIR) .sub 'main' :main .param pmc args $P0 = compreg 'C99' $P1 = $P0.'command_line'(args) .end 2008/05/15 YAPC::Asia 2008
  • 13. Parrot Compiler Tools Parrot Grammar Engine (PGE) Parrot Abstract Syntax Tree (PAST) Parrot Opcode Syntax Tree (POST) Not Quite Perl(6) (NQP) 2008/05/15 YAPC::Asia 2008
  • 14. Compilation Phase PAST PAST POST POST PIR 2008/05/15 YAPC::Asia 2008
  • 15. Parrot Grammar Engine(PGE) Perl6 Rule Rule Rule {*} Rule Parse Actions 2008/05/15 YAPC::Asia 2008
  • 16. Perl6 Rule grammar C99::Grammar is PCT::Grammar; token TOP { ^ + [ $ || ] {*} } rule external_declaration { | {*} #= declaration | {*} #= function_definition } 2008/05/15 YAPC::Asia 2008
  • 17. Parse Actions class C99::Grammar::Actions; method TOP($/) { for $ { my $fun := $( $_ ); if $fun.name() eq 'main' { make $fun; } } } method external_declaration($/, $key) { make $( $/{$key} ); } 2008/05/15 YAPC::Asia 2008
  • 18. Not Quite Perl(6) (NQP) Perl6 Parse Actions 2008/05/15 YAPC::Asia 2008
  • 19. Parrot Abstract Syntax Tree (PAST) AST Parse Actions PAST PAST PAST::Node, PAST::Val, PAST::Var 2008/05/15 YAPC::Asia 2008
  • 20. Lets Getting Started! $ svn co https://svn.perl.org/parrot/trunk parrot $ cd parrot $ perl Configure.pl $ make $ make test 2008/05/15 YAPC::Asia 2008
  • 21. Generate a Language Stub $ perl tools/dev/mk_language_shell.pl Foo language $ perl tools/dev/mk_language_shell.pl Foo language/foo 2008/05/15 YAPC::Asia 2008
  • 22. Generate a Language Stub config/gen/languages.pm $ laguages $languages = qq{ : : WMLScript Zcode Foo # add } unless defined $languages; 2008/05/15 YAPC::Asia 2008
  • 23. Generate a Language Stub $ perl Configure.pl $ cd language/foo $ make $ make test 2008/05/15 YAPC::Asia 2008
  • 24. Source Tree foo/ /config/makefiles/root.in /src/ /parser/ /actions.pm # Parse Actions NQP /grammar.pg # Perl6 Rule /builtins/ /say.pir # PIR /t/ /00-sanity.t # /harness /foo.pir # 2008/05/15 YAPC::Asia 2008
  • 25. Writing Code say Hello, Foo!; 2008/05/15 YAPC::Asia 2008
  • 26. Executes $ ../../parrot foo.pbc test.foo Hello, Foo! 2008/05/15 YAPC::Asia 2008
  • 27. Next Step foo/src/parser/grammar.pg foo/src/parser/actions.pm foo/src/builtins/xxx.pir 2008/05/15 YAPC::Asia 2008
  • 28. Open the grammar.pg Perl6 Rule http://dev.perl.org/perl6/doc/design/syn/S05.html grammar Rule Token Top level Rule TOP token Rule {*} 2008/05/15 YAPC::Asia 2008
  • 29. Open the actions.pm NQP Actions grammar.pg {*} Rule ($/) Rule Match Object 2008/05/15 YAPC::Asia 2008
  • 30. grammar.pg grammar C99::Grammar is PCT::Grammar; token TOP { ^ + [ $ || ] {*} } rule external_declaration { | {*} #= declaration | {*} #= function_definition } 2008/05/15 YAPC::Asia 2008
  • 31. actions.pm class C99::Grammar::Actions; method TOP($/) { for $ { my $fun := $( $_ ); if $fun.name() eq 'main' { make $fun; } } } method external_declaration($/, $key) { make $( $/{$key} ); } 2008/05/15 YAPC::Asia 2008
  • 32. NQP Syntax $/ Match $ $/ Match $( $x ) $x make Match PAST my $past := PAST::Op.new( :node($/) ); 2008/05/15 YAPC::Asia 2008
  • 33. PAST Nodes PAST::Node PAST::Block PAST::Stmts PAST::Var PAST::Val PAST::VarList PAST::Op 2008/05/15 YAPC::Asia 2008
  • 34. Advanced Topics Scope Management Operator precedence Calling Conventions 2008/05/15 YAPC::Asia 2008
  • 35. References docs/pct/*.pdd http://planet.parrotcode.org/ http://www.parrotblog.org/ http://www.parrotcode.org/ 2008/05/15 YAPC::Asia 2008
  • 36. Thank you ! 2008/05/15 YAPC::Asia 2008