The RakuAST
package serves as a common namespace for all classes that provide RakuAST functionality.
Support for RakuAST
functionality is available in language version 6.e+
and was added in Rakudo compiler release 2023.02. In earlier language versions it is only available when specifying:
use experimental :rakuast;
Classes§
Documentation of RakuAST
classes is ongoing, while the development of RakuAST is still ongoing as well.
Useful methods§
To make developing in RakuAST easier, several helper methods are available.
The AST
method can be called on a string containing Raku source code, and it will return the RakuAST object tree needed to create the AST of the given source code.
$ raku -e 'say Q/"Hello World"/.AST.^name'
RakuAST::StatementList
And the gist of such a RakuAST object tree shows the Raku source code to create such a tree:
$ raku -e 'say Q/"Hello World"/.AST'
RakuAST::StatementList.new(
RakuAST::Statement::Expression.new(
expression => RakuAST::Call::Name.new(
name => RakuAST::Name.from-identifier("say"),
args => RakuAST::ArgList.new(
RakuAST::QuotedString.new(
segments => (
RakuAST::StrLiteral.new("Hello World"),
)
)
)
)
)
)
This can be used as a base to create your own RakuAST object trees.
It is also possible to create a Raku source representation of a RakuAST object tree, by calling the .DEPARSE
method on it:
$ raku -e 'say Q/"Hello World"/.AST.DEPARSE'
say("Hello World")
Please note that the .AST
method depends on the Raku grammar, which may not yet support all of the Raku Programming Language features that you want to use. And vice-versa: the .DEPARSE
method may not be able to create a valid, executable Raku source representation, especially if the RakuAST object tree has been built "manually".