Perl 6 Parser Stuff in the Pugs Repo

Welcome to pugs/src/perl6. This is the home of STD.pm6, the canonical Perl 6 grammar, which is written in Perl 6 (of course). It is also the home of viv, a retargettable Perl 6 metacompiler which can translate STD.pm6 into Perl 5 (and eventually other things). The metacompiler relies on STD.pm6 to parse itself, requiring a stored bootstrap version of the compiled STD.pm. This is also the home of Cursor, the canonical implementation of the Perl 6 rules engine; it co-evolves with viv and executes the actual rules. This is also the home of a collection of minor tools used in the development of STD.pm6 and viv.

Prerequisites

You'll need the following Perl bits to run stuff:

* Perl 5.10.0 or later in PATH

* YAML::XS (e.g. sudo apt-get install libyaml-libyaml-perl)

* Moose (e.g. sudo apt-get install libmoose-perl)

* File::ShareDir

Running Stuff

You can get started by using the Makefile command, make. This will convert the Perl 6 grammar into a Perl 5 module, STD. STD has a fairly simple API; just call parse as a class method with the source you want to parse as a parameter, and look at the result. Another module, Actions, is provided which converts STD's output into a more object-oriented form; see viv's source for an example of the latter's use. (Both methods have more options when you need them.)

The following tools are provided which leverage the power of STD:

* tryfile parses a file of Perl 6 code and reports 'ok' or 'FAILED', plus the time taken and memory used.

* std does the same, but also tests Actions.

* redspans parses a file, reporting what rules matched which tokens.

* reds appears to be an older, non-working version of redspans.

* teststd uses STD to check the syntax of the Perl 6 Specification Tests.

* tloop is an interactive STD syntax checker.

* vill is a prototype STD-based LLVM-based Perl 6 JIT compiler.

* viv is a retargettable metacompiler for the static subset of Perl 6.

* std_hilite/STD_syntax_highlight is a syntax highlighter with multiple output formats.

See the headers of the respective programs for more details, and don't hesitate to ask around as quite a bit of this is underdocumented.

Working the Makefile

To regenerate perl 5 files from perl 6 STD.pm6, STD_P5.pm6, and Cursor.pm6 changes:

 make

To do that, but without running the self test (bootstrap):

 make fast

To remake only one file:

 make STD.pmc

To update the first stage, allowing new STD.pm6 or Cursor.pm6 features to be used while building future versions of STD.pm6 or Cursor.pm6:

 make reboot

To remove all generated files:

 make clean

To test the ability to parse the Perl 6 test suite (this is a very effective regression test, but slow - 20-75 minutes; also, it runs in a snapshot of the current directory, so you can continue hacking):

 make snaptest