PCT::HLLCompiler - base class for compiler objects


This file implements a HLLCompiler class of objects used for creating HLL compilers. It provides the standard methods required for all compilers, as well as some standard scaffolding for running compilers from a command line.

Methods ^

attr(string attrname, pmc value, int has_value)

Helper method for accessors -- gets/sets an attribute given by attrname based on has_value.

panic(message :slurpy)

Helper method to throw an exception (with a message).

language(string name)

Register this object as the compiler for name using the compreg opcode.


Accessor for the stages attribute.

parsegrammar([string grammar])

Accessor for the parsegrammar attribute.


Accessor for the parseactions attribute.

astgrammar([string grammar])

Accessor for the astgrammar attribute.

commandline_banner([string value])

Set the string in $S0 as a commandline prompt on the compiler in $P0. The prompt is the text that is shown on the commandline before a command is entered when the compiler is started in interactive mode.

commandline_prompt([string value])

Set the string in $S0 as a commandline banner on the compiler in $P0. The banner is the first text that is shown when the com‐ piler is started in interactive mode. This can be used for a copyright notice or other information.

removestage(string stagename)

Delete a stage from the compilation process queue.

addstage(string stagename [, "option" => value, ... ])

Add a stage to the compilation process queue. Takes either a "before" or "after" named argument, which gives the relative ordering of the stage to be added. If "before" and "after" aren't specified, the new stage is inserted at the end of the queue.

It's possible to add multiple stages of the same name: for example, you might repeat a stage like "optimize_tree" or "display_benchmarks" after each transformation. If you have multiple stages of the same name, and add a new stage before or after that repeated stage, the new stage will be added at every instance of the repeated stage.

compile(pmc code [, "option" => value, ... ])

Compile source (possibly modified by any provided options) by iterating through any stages identified for this compiler. If a target option is provided, then halt the iteration when the stage corresponding to target has been reached.

parse(source [, "option" => value, ...])

Parse source using the compiler's parsegrammar according to any options and return the resulting parse tree.

past(source [, "option" => value, ...])

Transform source into PAST using the compiler's astgrammar according to any options, and return the resulting ast.

post(source [, adverbs :slurpy :named])

Transform PAST source into POST.

eval(code [, "option" => value, ...])

Compile and execute the given code taking into account any options provided.

interactive(["encoding" => encoding] [, "option" => value, ...])

Runs an interactive compilation session -- reads lines of input from the standard input and evaluates each. The encoding option specifies the encoding to use for the input (e.g., "utf8").

evalfiles(files [, args] [, "encoding" => encoding] [, "option" => value, ...])

Compile and evaluate a file or files. The files argument may be either a single filename or an array of files to be processed as a single compilation unit. The encoding option specifies the encoding to use when reading the files, and any remaining options are passed to the evaluator.

process_args(PMC args)

Performs option processing of command-line args

command_line(PMC args)

Generic method for compilers invoked from a shell command line.

parse_name(string name)

Split name into its component namespace parts, as required by pdd21. The default is simply to split the name based on double-colon separators.


A usage method.


Display compiler version information.


Patrick R. Michaud <>