In a presentation I saw a little calculator written in NQP that read
from and write to the commandline. How can I parse (compile) a string
and assign the result from the grammar action to a variable with a
NQP-program. Is it possible?


# parser
grammar ABC::Grammar {
    rule TOP { <expr> }
    rule expr { <integer> <addop> <integer> };
    token addop { '+' | '-' }
    token integer { \d+ }
}

# transform to ast
class ABC::Actions {
    method TOP($/) {
        make PAST::Block.new( $<expr>.ast );
    }

    method expr($/) { 
        my $pirop := $<addop> eq '-' ?? 'sub' !! 'add';
        make PAST::Op.new( :pirop($pirop), 
                 +$<integer>[0], +$<integer>[1]);
    }
}


# compiler object (HLL::Compiler is base class for compilers)
class ABC::Compiler is HLL::Compiler {
    ABC::Compiler.language('abc');
    ABC::Compiler.parsegrammar(ABC::Grammar);
    ABC::Compiler.parseactions(ABC::Actions);
}

# invoke the compiler 
my @ARGS := (pir::getinterp__p)[2];     # args from Parrot
ABC::Compiler.command_line(@ARGS);

#my $result := ....( '3+4' ) ???


_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev

Reply via email to