163
. . . . . . Perl 6 前沿战报 刘鑫 <[email protected]> 金山软件 Kingsoft July 17, 2010

Perl 6 news at 2010-06

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Perl 6 news at 2010-06

. . . . . .

Perl 6 前沿战报

刘鑫 <[email protected]>

金山软件 Kingsoft

July 17, 2010

Page 2: Perl 6 news at 2010-06

. . . . . .

从创世纪到新的创世纪

Page 3: Perl 6 news at 2010-06

. . . . . .

A Joke About The King Of Scripts

Perl 是一门易学易用的语言。

——Larry Wall《Perl 语言编程》

Page 4: Perl 6 news at 2010-06

. . . . . .

1987 年发布第一版

Page 5: Perl 6 news at 2010-06

. . . . . .

2001 年愚人节的笑话Python? Perl? All in one!

Page 6: Perl 6 news at 2010-06

. . . . . .

十年的努力 2001 2̃010

Page 7: Perl 6 news at 2010-06

. . . . . .

Parrot ˜ Pugs ˜ Parrot ˜ Rakudo

Page 8: Perl 6 news at 2010-06

. . . . . .

2010-06-30

是的!祂来了!Parrot 2.5.0

Rakudo 2010-06

Page 9: Perl 6 news at 2010-06

. . . . . .

You can do it.

say ” h e l l o ” ;

Page 10: Perl 6 news at 2010-06

. . . . . .

Or you can do it.

say (” h e l l o ” ) ;

Page 11: Perl 6 news at 2010-06

. . . . . .

And you can do it yet.

” h e l l o ” . say ( ) ;

Page 12: Perl 6 news at 2010-06

. . . . . .

Of cause you can do it.

” h e l l o ” . say ;

Page 13: Perl 6 news at 2010-06

. . . . . .

example: grep in lines

#!/ u s r / b i n / env p e r l 6

use v6 ;

my $exp = @∗ARGS [ 0 ] ;#new s t y l e l oop and i ff o r $∗ IN . l i n e s −> $ l i n e {

i f $ l i n e ˜˜ m/ $exp / {say $ l i n e ;

}}

Page 14: Perl 6 news at 2010-06

. . . . . .

Shorter is better

#!/ u s r / b i n / env p e r l 6

use v6 ;

my $exp = @∗ARGS [ 0 ] ;f o r $∗ IN . l i n e s −> $ l i n e {

say $ l i n e i f $ l i n e ˜˜ m/ $exp / ;}

Page 15: Perl 6 news at 2010-06

. . . . . .

正式的多路选择分支支持——given/when

Page 16: Perl 6 news at 2010-06

. . . . . .

g i v en ( $x ) {when 5 {

say ’ $x i s the number 5 ’ ;}when ” abc ” {

say ’ $x i s the s t r i n g ” abc ” ’ ;}when Bool {

say ’ $x i s the boo l ean q u a n t i t y ’ ˜ $x ;}

}

Page 17: Perl 6 news at 2010-06

. . . . . .

还记得 Perl 5 中的 if/unless 表达式吗?

Page 18: Perl 6 news at 2010-06

. . . . . .

现在 for 也可以。

Page 19: Perl 6 news at 2010-06

. . . . . .

下面这个对象方法中使用了 for 表达式

Page 20: Perl 6 news at 2010-06

. . . . . .

method per fo rm ( ) {u n l e s s $ ! done {

. pe r fo rm ( ) f o r @! dependenc i e s ;&! c a l l b a c k ( ) ;$ ! done = True ;

}}

Page 21: Perl 6 news at 2010-06

. . . . . .

C 风格循环

Page 22: Perl 6 news at 2010-06

. . . . . .

l oop (my $ i = 0 ; $ i <= 5 ; $ i++) {p r i n t $ i ; # ”12345”

}

Page 23: Perl 6 news at 2010-06

. . . . . .

my $ i = 0 ;l oop ( ; $ i <= 5 ; $ i++) {

p r i n t $ i ;}

Page 24: Perl 6 news at 2010-06

. . . . . .

# ”12345”loop (my $ i = 0 ; $ i <= 5 ; ) {

p r i n t $ i ;$ i ++;

}

Page 25: Perl 6 news at 2010-06

. . . . . .

l oop (my $ i = 0 ; ; $ i++) {l a s t u n l e s s ( $ i <= 5 ) ;p r i n t $ i ;

}

Page 26: Perl 6 news at 2010-06

. . . . . .

my $ i = 0 ;l oop ( ; ; ) {

l a s t u n l e s s ( $ i <= 5 ) ;p r i n t $ i ;$ i ++;

}

Page 27: Perl 6 news at 2010-06

. . . . . .

支持 === ,即 eqv 操作符

Page 28: Perl 6 news at 2010-06

. . . . . .

支持三值比较运算符 <=> ,即 leg 操作符

Page 29: Perl 6 news at 2010-06

. . . . . .

惰性..

use v6 ;

my @l = 1 . . 1 0 ;say @l ;

Page 30: Perl 6 news at 2010-06

. . . . . .

围观

use v6 ;

my %s c o r e s =Ana => 8 ,Dave => 6 ,C h a r l i e => 4 ,Beth => 4 ;

Page 31: Perl 6 news at 2010-06

. . . . . .

my $ s c r e e n w i d t h = 30 ;my $ l a b e l a r e a w i d t h =

1 + [ max ] %s c o r e s » . key» . cha r s ;my $max score = [ max ] %s c o r e s » . v a l u e ;my $ u n i t = ( $ s c r e e n w i d t h − $ l a b e l a r e a w i d t h )

/ $max score ;

Page 32: Perl 6 news at 2010-06

. . . . . .

say $ l a b e l a r e a w i d t h ;f o r %s c o r e s {

my $ fo rmat = ’%− ’ ˜ $ l a b e l a r e a w i d t h ˜ ” s%s \n ” ;p r i n t f $ format , . key ,

’X ’ x ( $ u n i t ∗ . v a l u e ) ;}

Page 33: Perl 6 news at 2010-06

. . . . . .

Foreach 操作符

Page 34: Perl 6 news at 2010-06

. . . . . .

%sco r e s >>.key ;

Page 35: Perl 6 news at 2010-06

. . . . . .

相当于

Page 36: Perl 6 news at 2010-06

. . . . . .

得到%source 每一个键值对的 key

Page 37: Perl 6 news at 2010-06

. . . . . .

Reduce 操作符

Page 38: Perl 6 news at 2010-06

. . . . . .

my $label_area_width = 1 +[max] %scores».key».chars;

Page 39: Perl 6 news at 2010-06

. . . . . .

max(a, b) 得到 a 和 b 中较大的一个

Page 40: Perl 6 news at 2010-06

. . . . . .

[] 执行 reduce 操作

Page 41: Perl 6 news at 2010-06

. . . . . .

[max] @list 得到 @list 中最大者

Page 42: Perl 6 news at 2010-06

. . . . . .

Capture 允许将变量封装为可修改的引用

Page 43: Perl 6 news at 2010-06

. . . . . .

我们跳过与 perl5 一致的部分

Page 44: Perl 6 news at 2010-06

. . . . . .

匿名函数示例效果其实挺渣的我们看语法吧

Page 45: Perl 6 news at 2010-06

. . . . . .

use v6 ;

my $dance = ’ ’ ;my %moves =

hands−over−head => sub {$dance ˜= ’/ o\ ’

} ,

Page 46: Perl 6 news at 2010-06

. . . . . .

b i rd−arms => sub {$dance ˜= ’ |/ o \ | ’

} ,

Page 47: Perl 6 news at 2010-06

. . . . . .

l e f t => sub {$dance ˜= ’>o ’

} ,

Page 48: Perl 6 news at 2010-06

. . . . . .

r i g h t => sub {$dance ˜= ’o< ’

} ,

Page 49: Perl 6 news at 2010-06

. . . . . .

arms−up => sub {$dance ˜= ’\ o/ ’

} ;

Page 50: Perl 6 news at 2010-06

. . . . . .

my @awesome−dance = <arms−upb i rd−armsr i g h thands−over−head >;

f o r @awesome−dance −> $move {%moves{$move } . ( ) ;

}say $dance ;

Page 51: Perl 6 news at 2010-06

. . . . . .

Signatures

带参数的也可以

Page 52: Perl 6 news at 2010-06

. . . . . .

基本的

sub orde r−bee r ( $name ) {say ” He l l o , $name ” ;

}

Page 53: Perl 6 news at 2010-06

. . . . . .

读写限定

sub make−i t −more−so ( $ i t i s rw ) {$ i t ˜= s u b s t r ( $ i t , $ i t . c ha r s − 1) x 5 ;}my $happy = ” yay ! ” ;make−i t −more−so ( $happy ) ;

Page 54: Perl 6 news at 2010-06

. . . . . .

say $happy ; # yay ! ! ! ! ! !# F a i l s ; ’cant modi fy a con s t an tmake−i t −more−so (” uh−oh ” ) ;

Page 55: Perl 6 news at 2010-06

. . . . . .

复制

sub say−i t −one−h i g h e r ( $ i t i s copy ) {$ i t ++;say $ i t ;

}

Page 56: Perl 6 news at 2010-06

. . . . . .

my $unanswer = 41 ;say−i t −one−h i g h e r ( $unanswer ) ; # 42say−i t −one−h i g h e r ( 4 1 ) ; # 42

Page 57: Perl 6 news at 2010-06

. . . . . .

HASH 和 ARRAY 参数也可以照常传递。

Page 58: Perl 6 news at 2010-06

. . . . . .

其实回调神马的也可以

sub do−i t − l o t s (& i t , $how−many−t imes ) {f o r 1 . . $how−many−t imes {

i t ( ) ;}

}

Page 59: Perl 6 news at 2010-06

. . . . . .

do−i t − l o t s ( sub {say ” Eat i ng a s t r o o p w a f e l ”

} , 1 0 ) ;

Page 60: Perl 6 news at 2010-06

. . . . . .

还记得 Python 的函数参数隐式拆封吗?

Page 61: Perl 6 news at 2010-06

. . . . . .

Perl 6 也可以

Page 62: Perl 6 news at 2010-06

. . . . . .

Interpolating Arrays and Hashes

Page 63: Perl 6 news at 2010-06

. . . . . .

my %user−p r e f e r e n c e s =( from => ’Northern ’Sea ) ;

o rde r−sh r imps (3 ,|% user−p r e f e r e n c e s )

Page 64: Perl 6 news at 2010-06

. . . . . .

参数默认值

Page 65: Perl 6 news at 2010-06

. . . . . .

sub orde r−s t e ak ( $how = ’’medium ) {say ”’ I d l i k e a s teak , $how ” ;}orde r−s t e ak ( ) ;o rde r−s t e ak’( w e l l ’done ) ;

Page 66: Perl 6 news at 2010-06

. . . . . .

或者可以给个空

Page 67: Perl 6 news at 2010-06

. . . . . .

sub orde r−bu rge r ( $type , $ s i d e ?) {say ”’ I d l i k e a $ type bu rge r ” ˜

( d e f i n e d ( $ s i d e ) ??” wi th a s i d e o f $ s i d e ” ! ! ”” ) ;

}

Page 68: Perl 6 news at 2010-06

. . . . . .

orde r−bu rge r (” t r i p l e bacon ” ,” deep f r i e d on ion r i n g s ” ) ;

Page 69: Perl 6 news at 2010-06

. . . . . .

按参数名传递参数

Page 70: Perl 6 news at 2010-06

. . . . . .

sub orde r−bee r ( $type , $ p i n t s ) {say ( $ p i n t s == 1 ??’

A ’p i n t ! !” $ p i n t s p i n t s ”) ˜ ” o f $type , p l e a s e . ”

}

Page 71: Perl 6 news at 2010-06

. . . . . .

orde r−bee r ( type => ’’Hobgobl in ,p i n t s => 1 ) ;

# A p i n t o f Hobgobl in , p l e a s e .

Page 72: Perl 6 news at 2010-06

. . . . . .

orde r−bee r ( p i n t s => 3 ,type => ’Z l a t ý ž’Baant ) ;

# 3 p i n t s o f Z l a t ý žBaant , p l e a s e .

Page 73: Perl 6 news at 2010-06

. . . . . .

可以要求一定讲对名字

Page 74: Perl 6 news at 2010-06

. . . . . .

sub orde r−sh r imps ( $count ,: $ from = ’North ’Sea ) {

say ”’ I d l i k e $count . . . $ from . . . ” ;}

Page 75: Perl 6 news at 2010-06

. . . . . .

# ta ke s the d e f a u l t v a l u e ’North ’Seaorde r−sh r imps ( 6 ) ;o rde r−sh r imps (4 , from => ’A t l a n t i c ’Ocean ) ;

Page 76: Perl 6 news at 2010-06

. . . . . .

# not a l l owed , : $ from i s named on l yo rde r−sh r imps (22 , ’Med i t e r r anean ’Sea ) ;

Page 77: Perl 6 news at 2010-06

. . . . . .

或者就当不存在

Page 78: Perl 6 news at 2010-06

. . . . . .

sub des i gn−i c e−cream−mix tu r e (: $name ! ,$base = ’’V a n i l l a ,@mix ins ) {

say ” C r e a t i n g a new r e c i p e named $name ! ”}

Page 79: Perl 6 news at 2010-06

. . . . . .

des ign−i c e−cream−mix tu r e (name => ’’P l a i n ) ;

Page 80: Perl 6 news at 2010-06

. . . . . .

# m i s s i n g $namedes ign−i c e−cream−mix tu r e (

base => ’St r awbe r r y ’ ch i p ) ;

Page 81: Perl 6 news at 2010-06

. . . . . .

这里不讨论重命名参数,有兴趣的朋友可以自行查询

Page 82: Perl 6 news at 2010-06

. . . . . .

有隐式拆封就有隐式封装

Page 83: Perl 6 news at 2010-06

. . . . . .

sub shout−them (∗@words ) {f o r @words −> $w {

p r i n t uc (”$w ” ) ;}

}

Page 84: Perl 6 news at 2010-06

. . . . . .

# now you can pas s i t emsshout−them’(’go ) ; # GOshout−them’(’go , ’’home ) ; # GO HOME

Page 85: Perl 6 news at 2010-06

. . . . . .

my @words = ’(’go , ’’home ) ;shout−them ( @words ) ; # s t i l l works

Page 86: Perl 6 news at 2010-06

. . . . . .

山寨一个修饰模式

Page 87: Perl 6 news at 2010-06

. . . . . .

sub debug−wrapper (&code ,∗ @ p o s i t i o n a l ,∗%named ) {

warn ” C a l l i n g ’&code . name ( ) ’ w i th arguments ”˜ ” @ p o s i t i o n a l . p e r l ( ) , %named . p e r l ( )\ n ” ;

code ( | @ p o s i t i o n a l , |%named ) ;warn ” . . . back from ’&code . name’ ( )\ n ” ;

}

Page 88: Perl 6 news at 2010-06

. . . . . .

debug−wrapper (&orde r−shr imps ,4 ,from => ’A t l a n t i c ’Ocean ) ;

Page 89: Perl 6 news at 2010-06

. . . . . .

还记得 Python 的 tuple 隐式拆装吗?

Page 90: Perl 6 news at 2010-06

. . . . . .

sub menu {i f rand < 0 .5 {’’

f i s h , ’wh i t e ’wine} e l s e {’’

s teak , ’ r ed ’wine ;}

}my ( $ food , $beve rage ) = menu ( ) ;

Page 91: Perl 6 news at 2010-06

. . . . . .

还可以指定类型

Page 92: Perl 6 news at 2010-06

. . . . . .

sub mean ( Numeric $a , Numeric $b ) {r e t u r n ( $a + $b ) / 2 ;

}

Page 93: Perl 6 news at 2010-06

. . . . . .

正确!结果为 2。

say mean 2.5, 1.5;

Page 94: Perl 6 news at 2010-06

. . . . . .

乱来什么的,讨厌了!

say mean ”some”, ”strings”;

Page 95: Perl 6 news at 2010-06

. . . . . .

Nominal type check failed for parameter ”$a”; expected Numericbut got Str instead

Page 96: Perl 6 news at 2010-06

. . . . . .

还记得 Haskell 的参数匹配吗?

Page 97: Perl 6 news at 2010-06

. . . . . .

sub c i r c l e −r a d i u s−from−a r ea (Numeric $a rea

where { $a rea >= 0 }) {( $a rea / p i ) . s q r t

}

Page 98: Perl 6 news at 2010-06

. . . . . .

say c i r c l e −r a d i u s−from−a r ea ( 3 ) ; # OKsay c i r c l e −r a d i u s−from−a r ea (−3); # E r r o r

Page 99: Perl 6 news at 2010-06

. . . . . .

只接受限定值

Page 100: Perl 6 news at 2010-06

. . . . . .

sub se t−volume ( Numeric $volume where 0 . . 1 1 ) {say ” Turn ing i t up to $volume ” ;

}

Page 101: Perl 6 news at 2010-06

. . . . . .

可以使用 hash 约束参数

Page 102: Perl 6 news at 2010-06

. . . . . .

Currying !

Page 103: Perl 6 news at 2010-06

. . . . . .

原型

sub orde r−bu rge r ( $type , $ s i d e ? ) { . . . } ;

Page 104: Perl 6 news at 2010-06

. . . . . .

assuming

&order−the−u s u a l :=&orde r−bu rge r . assuming ( ’’ v e g g i e ) ;

&orde r−burger−and− f r i e s :=&orde r−bu rge r . assuming (

s i d e => ’ f r e n c h ’ f r i e s ) ;

Page 105: Perl 6 news at 2010-06

. . . . . .

USAGE

orde r−the−u s u a l ( ’’ s a l s a ) ;o rde r−the−u s u a l ( s i d e => ’’ b r o c c o l i ) ;o rde r−burger−and− f r i e s ( ’’ p l a i n ) ;o rde r−burger−and− f r i e s ( : type<<double−beef>> ) ;

Page 106: Perl 6 news at 2010-06

. . . . . .

函数自省

Page 107: Perl 6 news at 2010-06

. . . . . .

定一个函数

Page 108: Perl 6 news at 2010-06

. . . . . .

sub l o g a r i t h m ( Numeric $x , Numeric : $base = exp ( 1 ) ) {l o g ( $x ) / l o g ( $base ) ;

}

Page 109: Perl 6 news at 2010-06

. . . . . .

得到参数

Page 110: Perl 6 news at 2010-06

. . . . . .

my @params = &l o g a r i t h m . s i g n a t u r e . params ;say @params . e lems , ’’ pa ramete r s ;

Page 111: Perl 6 news at 2010-06

. . . . . .

得到参数的详细信息

Page 112: Perl 6 news at 2010-06

. . . . . .

f o r @params {say ”Name : ” , . name ;say ” Type : ” , . t ype ;say ” named? ” , . named ?? ’’ye s ! ! ’’no ;say ” s l u r p y ? ” , . s l u r p y ?? ’’ye s ! ! ’’no ;say ” o p t i o n a l ? ” , . o p t i o n a l ?? ’’ye s ! ! ’

’no ;}

Page 113: Perl 6 news at 2010-06

. . . . . .

各种 to-json

Page 114: Perl 6 news at 2010-06

. . . . . .

m u l t i to−j s o n ( Rea l $d ) { ˜$d }

Page 115: Perl 6 news at 2010-06

. . . . . .

m u l t i to−j s o n ( Bool $d ) { $d ?? ’’t r u e ! ! ’’f a l s e ; }

Page 116: Perl 6 news at 2010-06

. . . . . .

m u l t i to−j s o n ( S t r $d ) {’ ” ’˜ $d . t r a n s ( [ ’ ” ’ ,

’\\ ’ ,”\b ” ,”\ f ” ,”\n ” ,”\ r ” ,”\ t ” ]

Page 117: Perl 6 news at 2010-06

. . . . . .

=> [ ’ \ ” ’ ,’\\\\ ’ ,’\b ’ ,’\ f ’ ,’\n ’ ,’\ r ’ ,’\ t ’ ] )

˜ ’ ” ’}

Page 118: Perl 6 news at 2010-06

. . . . . .

m u l t i to−j s o n ( Ar ray $d ) {r e t u r n ’ [ ’

˜ $d . v a l u e s . map({to−j s o n ( $ )

} ) . j o i n ( ’ , ’ )˜ ’ ] ’ ;

}

Page 119: Perl 6 news at 2010-06

. . . . . .

m u l t i to−j s o n ( Hash $d ) {r e t u r n ’{ ’

˜ $d . p a i r s . map({ to−j s o n ( . key )˜ ’ : ’˜ to−j s o n ( . v a l u e ) } ) . j o i n ( ’ , ’ )˜ ’ } ’ ;

}

Page 120: Perl 6 news at 2010-06

. . . . . .

m u l t i to−j s o n ( $dwhere { ! d e f i n e d $d }) {

’ n u l l ’}

Page 121: Perl 6 news at 2010-06

. . . . . .

m u l t i to−j s o n ( $d ) {d i e ”’Cant s e r i a l i z e an o b j e c t o f type ”

˜ $d .WHAT. p e r l}

Page 122: Perl 6 news at 2010-06

. . . . . .

Perl 6 增强了面向对象语法,使之更合理,更易写易读。

Page 123: Perl 6 news at 2010-06

. . . . . .

下面看一个比较完整的示例

Page 124: Perl 6 news at 2010-06

. . . . . .

比 P5 更好读的结构

c l a s s Task {. . . .

}

Page 125: Perl 6 news at 2010-06

. . . . . .

属性使用 has 标示

Page 126: Perl 6 news at 2010-06

. . . . . .

c l a s s Task {has &! c a l l b a c k ;has Task @! dependenc i e s ;has Bool $ . done ;

. . .

Page 127: Perl 6 news at 2010-06

. . . . . .

! 操作符表示私有限定

has &! c a l l b a c k ;has Task @! dependenc i e s ;

Page 128: Perl 6 news at 2010-06

. . . . . .

私有变量与访问器

Page 129: Perl 6 news at 2010-06

. . . . . .

has Bool $ ! done ;method done ( ) {

r e t u r n $ ! done}

Page 130: Perl 6 news at 2010-06

. . . . . .

. 标示自动封装一个只读访问器

Page 131: Perl 6 news at 2010-06

. . . . . .

has Bool $ . done ;

Page 132: Perl 6 news at 2010-06

. . . . . .

可以明确标示可读写

Page 133: Perl 6 news at 2010-06

. . . . . .

has Bool $ . done i s rw ;

Page 134: Perl 6 news at 2010-06

. . . . . .

普通的成员方法

Page 135: Perl 6 news at 2010-06

. . . . . .

method add−dependency ( Task $dependency ) {push @! dependenc i e s , $dependency ;

}

Page 136: Perl 6 news at 2010-06

. . . . . .

构造函数

Page 137: Perl 6 news at 2010-06

. . . . . .

# RAKUDO: Should r e a l l y be# ’& c a l l b a c k ’ [ p e r l #69766]method new ( C a l l a b l e $ c a l l b a c k ,

Task ∗@dependenc i e s ) {r e t u r n s e l f . b l e s s (∗ ,

: $ c a l l b a c k ,: @dependenc i e s ) ;

}

Page 138: Perl 6 news at 2010-06

. . . . . .

使用示范

Page 139: Perl 6 news at 2010-06

. . . . . .

my $eat =Task . new ({ say ’ e a t i n g d i n n e r . NOM’ ! } ,

Task . new ({ say ’making ’d i n n e r } ,. . .)

) ;

Page 140: Perl 6 news at 2010-06

. . . . . .

模式匹配——regex

Page 141: Perl 6 news at 2010-06

. . . . . .

If you know regexes from other programming languages it’’s bestto forget their syntax; Perl 6 differs from PCRE or POSIX regexes.by Perl 6 book

Page 142: Perl 6 news at 2010-06

. . . . . .

最基本的语法没有大变化

Page 143: Perl 6 news at 2010-06

. . . . . .

Note: Perl6 智能匹配符 ˜˜

Page 144: Perl 6 news at 2010-06

. . . . . .

f o r $∗ IN . l i n e s {. say i f m/who / ;

} ;

Page 145: Perl 6 news at 2010-06

. . . . . .

表达式内插

Page 146: Perl 6 news at 2010-06

. . . . . .

这明明是个半成品啊喂˜

my token word { \w+ [ \ ’ \w+]? } ;my r egex dup { <word=&word>

\W+ $<word> } ;

Page 147: Perl 6 news at 2010-06

. . . . . .

f o r $∗ IN . l i n e s −> $ l i n e {i f $ l i n e ˜˜ m/ <dup=&dup> / {

say ”Found ’{$<dup><word>} ’tw i c e i n \” $ l i n e \”” ;

}}

Page 148: Perl 6 news at 2010-06

. . . . . .

让它去读诗,结果杯具了……

Page 149: Perl 6 news at 2010-06

. . . . . .

《失乐园》

Page 150: Perl 6 news at 2010-06

. . . . . .

Of Mans First Disobedience, and the FruitOf that Forbidden Tree, whose mortal tastBrought Death into the World, and all our woe,...

Page 151: Perl 6 news at 2010-06

. . . . . .

发生了什么事?

Found 't' twice in "Sing Heav'nly ...Found 't' twice in "That Shepherd, ...Found 't' twice in "Delight thee more,......

Page 152: Perl 6 news at 2010-06

. . . . . .

刚才看到了什么?

Page 153: Perl 6 news at 2010-06

. . . . . .

my token word { \w+ [ \ ’ \w+]? } ;

Page 154: Perl 6 news at 2010-06

. . . . . .

可以用于 regex 或 gammar 的表达式片段

Page 155: Perl 6 news at 2010-06

. . . . . .

Gammar ˜ Rules ˜ Regex ˜ Token

Page 156: Perl 6 news at 2010-06

. . . . . .

递归下降

Page 157: Perl 6 news at 2010-06

. . . . . .

语法解析

Page 158: Perl 6 news at 2010-06

. . . . . .

现在,可以用 Perl 语言直接书写语法分析

Page 159: Perl 6 news at 2010-06

. . . . . .

前提!!!

如果这个坑填了……

Page 160: Perl 6 news at 2010-06

. . . . . .

看一个理想的目标rakudo-2010.06/t/spec/S05-match/perl.t

Page 161: Perl 6 news at 2010-06

. . . . . .

grammar ExprT1 {r u l e TOP { ˆ \d+ [ <ope ra to r> \d+ ]∗ }token o p e r a t o r { ’ / ’ | ’∗ ’ | ’+ ’ | ’− ’ } ;

} ;

Page 162: Perl 6 news at 2010-06

. . . . . .

my regex f { f } ;my r egex o { o } ;ok ” foo ” ˜˜ /< f=&f> <o=&o>+ / ,

’ Regex matches ( 2 ) ’ ;l i v e s o k { $ / . p e r l } , ’ l i v e s . . .

Page 163: Perl 6 news at 2010-06

. . . . . .

谢谢大家!