Contenu connexe Similaire à Parrot Compiler Tools Similaire à Parrot Compiler Tools (20) Plus de Kazutake Hiramatsu Plus de Kazutake Hiramatsu (6) Parrot Compiler Tools2. 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 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 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 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. 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 19. Parrot Abstract Syntax Tree
(PAST)
AST
Parse Actions PAST
PAST
PAST::Node, PAST::Val, PAST::Var…
2008/05/15 YAPC::Asia 2008 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. 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. 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 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 {
^
<external_declaration>+
[ $ || <.panic: Syntax error> ]
{*}
}
rule external_declaration {
| <declaration> {*} #= declaration
| <function_definition> {*} #= function_definition
}
2008/05/15 YAPC::Asia 2008 32. NQP Syntax
$/ Match
$<expression> $/ 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