Perl6のgrammarが凄い件について 〜残パン会で発表してきた〜
残パン会とは
残念な言語で残念なものを、残念パンをもそもそしながら新聞紙引いた残念な場所で適当に書く。
Perl6とは
「Perlのようなもの」
とか言われてる、Perl5とは別物。らしい←本人Perl5知らない。
Perl6の特徴とか
grammarとは
yaccの構文みたいに書けばパーサ作れるよ!
私が色々書くよりこっちの方がいいんじゃないかな。
http://d.hatena.ne.jp/osanine/20101217/1292597385
作ったもの
数式をパースしてるだけ。
grammar CalcExp { token num { \d+ } token op { '**' | '+' | '-' | '*' | '/' } rule value { <exp> | <num> } rule exp { '(' <value> <op> <value> ')' } rule TOP { ^ <value> $ } } class Calc { method num($/) { make eval $/.Str } method exp($/) { given $<op> { when '**' { make $<value>[0].ast ** $<value>[1].ast } when '+' { make $<value>[0].ast + $<value>[1].ast } when '-' { make $<value>[0].ast - $<value>[1].ast } when '*' { make $<value>[0].ast * $<value>[1].ast } when '/' { make $<value>[0].ast / $<value>[1].ast } } } method TOP($/) { make $<value>.ast } method value($/) { make $/.values[0].ast } } my $s = "(2**(1+3))"; my $m = CalcExp.parse($s, actions=>Calc); say $m.ast;
括弧外せるようにしたかったが
何かできんかった