Parrot Compiler Tools

3,058 views
2,995 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,058
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Parrot Compiler Tools

  1. 1. Parrot Compiler Tools Kazutake Hiramatsu kazutakehiramatsu@gmail.com 2008/05/15 YAPC::Asia 2008
  2. 2. Introduction  2001  2005 Pugs  2006 Perl6  2008 Parrot version 0.6.1  Parrot is Dead ? 2008/05/15 YAPC::Asia 2008
  3. 3. What is Parrot Compiler Tools (PCT) ?  Parrot VM  Rakudo PCT  Parrot PCT  2008/05/15 YAPC::Asia 2008
  4. 4. All Dynamic language is compiled into Parrot bytecode Perl6 Perl5 Ruby Python Parrot VM 2008/05/15 YAPC::Asia 2008
  5. 5. All Dynamic language is compiled into Parrot bytecode Perl6 Perl5 Ruby Python Parrot VM 2008/05/15 YAPC::Asia 2008
  6. 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. 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. 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. 9. Parrot Assembly language (PASM)  Parrot  Parrot 2008/05/15 YAPC::Asia 2008
  10. 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. 11. Parrot Intermediate Representation (PIR)  PASM  PASM 2008/05/15 YAPC::Asia 2008
  12. 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. 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. 14. Compilation Phase   PAST  PAST POST  POST PIR 2008/05/15 YAPC::Asia 2008
  15. 15. Parrot Grammar Engine(PGE)  Perl6 Rule  Rule  Rule  “{*}“ Rule  Parse Actions 2008/05/15 YAPC::Asia 2008
  16. 16. Perl6 Rule grammar C99::Grammar is PCT::Grammar; token TOP { ^ <external_declaration>+ [ $ || <.panic: Syntax error> ] {*} } rule external_declaration { | <declaration> {*} #= declaration | <function_definition> {*} #= function_definition } 2008/05/15 YAPC::Asia 2008
  17. 17. Parse Actions class C99::Grammar::Actions; method TOP($/) { for $<external_declaration> { my $fun := $( $_ ); if $fun.name() eq 'main' { make $fun; } } } method external_declaration($/, $key) { make $( $/{$key} ); } 2008/05/15 YAPC::Asia 2008
  18. 18. Not Quite Perl(6) (NQP)  Perl6  Parse Actions 2008/05/15 YAPC::Asia 2008
  19. 19. Parrot Abstract Syntax Tree (PAST)  AST  Parse Actions PAST  PAST  PAST::Node, PAST::Val, PAST::Var… 2008/05/15 YAPC::Asia 2008
  20. 20. Let’s 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. 21. Generate a Language Stub $ perl tools/dev/mk_language_shell.pl <language> <location> Foo language $ perl tools/dev/mk_language_shell.pl Foo language/foo 2008/05/15 YAPC::Asia 2008
  22. 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. 23. Generate a Language Stub $ perl Configure.pl $ cd language/foo $ make $ make test 2008/05/15 YAPC::Asia 2008
  24. 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. 25. Writing Code say “Hello, Foo!”; 2008/05/15 YAPC::Asia 2008
  26. 26. Executes $ ../../parrot foo.pbc test.foo Hello, Foo! 2008/05/15 YAPC::Asia 2008
  27. 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. 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. 29. Open the actions.pm  NQP  Actions  grammar.pg “{*}” Rule  ($/) Rule Match Object 2008/05/15 YAPC::Asia 2008
  30. 30. grammar.pg grammar C99::Grammar is PCT::Grammar; token TOP { ^ <external_declaration>+ [ $ || <.panic: Syntax error> ] {*} } rule external_declaration { | <declaration> {*} #= declaration | <function_definition> {*} #= function_definition } 2008/05/15 YAPC::Asia 2008
  31. 31. actions.pm class C99::Grammar::Actions; method TOP($/) { for $<external_declaration> { my $fun := $( $_ ); if $fun.name() eq 'main' { make $fun; } } } method external_declaration($/, $key) { make $( $/{$key} ); } 2008/05/15 YAPC::Asia 2008
  32. 32. NQP Syntax  $/ Match  $<expression> $/ Match  $( $x ) $x  make Match PAST  my $past := PAST::Op.new( :node($/) ); 2008/05/15 YAPC::Asia 2008
  33. 33. PAST Nodes  PAST::Node  PAST::Block  PAST::Stmts  PAST::Var  PAST::Val  PAST::VarList  PAST::Op 2008/05/15 YAPC::Asia 2008
  34. 34. Advanced Topics  Scope Management  Operator precedence  Calling Conventions 2008/05/15 YAPC::Asia 2008
  35. 35. References  docs/pct/*.pdd  http://planet.parrotcode.org/  http://www.parrotblog.org/  http://www.parrotcode.org/ 2008/05/15 YAPC::Asia 2008
  36. 36. Thank you ! 2008/05/15 YAPC::Asia 2008

×