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.

language(string name)

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

parsegrammar([string grammar])

Accessor for the parsegrammar attribute.

astgrammar([string grammar])

Accessor for the astgrammar attribute.

ostgrammar([string grammar])

Accessor for the 'ostgrammar' attribute.

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). If a compsub has been registered for this compiler, use it, otherwise use the parsegrammar and astgrammar attributes to get to an AST and compile it, otherwise throw an exception.

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

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

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

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

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.

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.

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

Transform source using the compiler's ostgrammar according to any options given by adverbs, and return the resulting ost.

register(string name, pmc compsub) # DEPRECATED

(Deprecated.) Registers this compiler object as name and using compsub as the subroutine to call for performing compilation.


Patrick R. Michaud <>