use v6-alpha; say "Loading BASIC grammar..."; #grammar Basic { rule var { \$ } rule string { <-["]>+ } rule expr { [ | "" } rule expr_list { [ \s* , \s* ]* } rule f_let { LET \s+ \s* = \s* } rule f_print { PRINT \s+ } rule f_goto { GOTO \s+ (\d+) } rule command { | | } rule line { [\s*;]+ } rule program { [\n+]+ } #} sub expr_to_string (Match $expr) { return %$expr. if defined %$expr.; } do { my $basic_program; my $i = 0; my $line = "123"; repeat while $line.chars { print "{$i++}: "; $line = =$*IN; # exit if $line eq "exit"; $basic_program ~= $line ~ "\n"; } my $parsed = $basic_program ~~ //; $parsed.perl.say; execute($parsed) if $parsed; }; sub execute (Match $basic) { say "Running..."; my $i = 0; for @($basic) -> $line { # say "{$i++}: $line"; for @($line) -> $cmd { for %$cmd.keys { when 'f_print' { print expr_to_string(%$cmd) } } } } say "\nDone."; }