Parrot Compiler Tools

                             Kazutake Hiramatsu
                             kazutakehiramatsu@gmai...
Introduction
    2001
    2005                Pugs
    2006                Perl6
    2008                        Parro...
What is Parrot Compiler
Tools (PCT) ?
    Parrot VM


    Rakudo                      PCT
    Parrot                   ...
All Dynamic language is compiled
into Parrot bytecode


    Perl6                    Perl5   Ruby   Python




           ...
All Dynamic language is compiled
into Parrot bytecode


    Perl6                    Perl5   Ruby   Python




           ...
What is Parrot ?
    Register-based VM
             (Perl, Ruby etc)


    4                           (In, Nn, Sn, Pn)...
Parrot Registers
    Integers (I)
    Numbers (N)
    Strings (S)
    PMCs (P)
      – Parrot Magic Cookies
      – St...
Parrot Registers

I0          integer register #0
N1          number of floating point
            register #1
S2         ...
Parrot Assembly language
(PASM)
    Parrot
    Parrot




    2008/05/15 YAPC::Asia 2008
Parrot Assembly language
(PASM)
set I0, 1
set S0, quot;Fooquot;
set S1, S0
set S0, quot;Barquot;
print S1                 ...
Parrot Intermediate
Representation (PIR)
    PASM
    PASM




    2008/05/15 YAPC::Asia 2008
Parrot Intermediate
Representation (PIR)
.sub 'main' :main
   .param pmc args

   $P0 = compreg 'C99'
   $P1 = $P0.'comman...
Parrot Compiler Tools
    Parrot Grammar Engine (PGE)
    Parrot Abstract Syntax Tree (PAST)
    Parrot Opcode Syntax T...
Compilation Phase



                                       PAST
    PAST                        POST
    POST        ...
Parrot Grammar
Engine(PGE)
    Perl6                Rule
    Rule
    Rule
                                “{*}“      ...
Perl6 Rule
grammar C99::Grammar is PCT::Grammar;
token TOP {
    ^
    <external_declaration>+
    [ $ || <.panic: Syntax ...
Parse Actions
class C99::Grammar::Actions;


method TOP($/) {
    for $<external_declaration> {
        my $fun := $( $_ )...
Not Quite Perl(6) (NQP)
    Perl6
    Parse Actions




    2008/05/15 YAPC::Asia 2008
Parrot Abstract Syntax Tree
(PAST)
                           AST
    Parse Actions                PAST
               ...
Let’s Getting Started!
$ svn co https://svn.perl.org/parrot/trunk parrot
$ cd parrot
$ perl Configure.pl
$ make
$ make tes...
Generate a Language Stub

$ perl tools/dev/mk_language_shell.pl <language> <location>


        Foo              language
...
Generate a Language Stub
config/gen/languages.pm               $ laguages

$languages = qq{
               :
             ...
Generate a Language Stub

$ perl Configure.pl
$ cd language/foo
$ make
$ make test




 2008/05/15 YAPC::Asia 2008
Source Tree
foo/
 /config/makefiles/root.in
 /src/
       /parser/
            /actions.pm       # Parse Actions   NQP

  ...
Writing Code
say “Hello, Foo!”;




 2008/05/15 YAPC::Asia 2008
Executes
$ ../../parrot foo.pbc test.foo
Hello, Foo!




 2008/05/15 YAPC::Asia 2008
Next Step



      – foo/src/parser/grammar.pg
      – foo/src/parser/actions.pm




      –   foo/src/builtins/xxx.pir
...
Open the grammar.pg
    Perl6                       Rule
      –   http://dev.perl.org/perl6/doc/design/syn/S05.html
   ...
Open the actions.pm
    NQP
    Actions
    grammar.pg                  “{*}”

                       Rule
           ...
grammar.pg
grammar C99::Grammar is PCT::Grammar;


token TOP {
    ^
    <external_declaration>+
    [ $ || <.panic: Synta...
actions.pm
class C99::Grammar::Actions;


method TOP($/) {
    for $<external_declaration> {
        my $fun := $( $_ );

...
NQP Syntax
    $/            Match
    $<expression>                 $/                         Match


    $( $x )    ...
PAST Nodes
    PAST::Node
    PAST::Block
    PAST::Stmts
    PAST::Var
    PAST::Val
    PAST::VarList
    PAST::O...
Advanced Topics
    Scope Management
    Operator precedence
    Calling Conventions




    2008/05/15 YAPC::Asia 2008
References
    docs/pct/*.pdd
    http://planet.parrotcode.org/
    http://www.parrotblog.org/
    http://www.parrotco...
Thank you !




2008/05/15 YAPC::Asia 2008
Upcoming SlideShare
Loading in...5
×

Parrot Compiler Tools

2,865

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
2,865
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×