use v6-alpha; grammar Pugs::Grammar::MiniPerl6; token EscapeChar { \\ | \" } token String { \" [ <-[\\"]> | \\ ]* \" } token VariableName { [ | _] [ | _ | \d]* } token CaptureVariableName { | \< \> { return $ } | { return $ } | $ := (\d+) { return "capture_" ~ $ } } token Variable { \$ { return $ } } token Constants { | | \d+ } rule ArrayTail { | \] { return ']' } | , { return ', ' ~ $ ~ $ } } rule ArrayRef { \[ { return '[' ~ $ ~ $; } } token FunctionName { } rule Parameters { [ , ]? { if( $[0] ){ return $ ~ " " ~ $[0]; }else{ return $; } } } token FunctionAppExpr { | { return $ } | { return $ } | { return $ } | [ <'('> <')'>]? { if($[0]){ return "(" ~ $ ~ " " ~ $[0] ~ ")"; }else{ return $; }; } } rule AdditiveExpr {[ $:=(\+|\-|~) ]?{ if($[0]){ my $op = $[0] eq '~' ?? '++' !! $[0]; return "(" ~ $ ~ " " ~ $op ~ " " ~ $[0] ~ ")"; }else{ return $; } }} token Expr { { return $ } } rule Return { |<'return'> \;? { return "return \$ " ~ $ } |<'return'> \;? { return "return ()" } } rule VariableDeclaration {<'my'> <'='> \; { return "let " ~ $ ~ " = " ~ $ ~ " in\n" } } token ProductionRule # :p(0) --- v6.pm TODO { | ? { return $ ~ $ } | ? { return $ } }