Skip to content
Perl 6 standard grammar
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
boot get back into a self-hosting state Sep 18, 2014
inc [STD] prefix LazyMap and Actions with an STD:: prefix Jul 29, 2010
lib catch up standard with s/done_testing/done/ Jan 12, 2011
std_hilite
tools
.gitignore added a .gitignore to src/perl6 Jul 14, 2009
Actions.pm suppress missing action package warnings Sep 1, 2012
CORE.setting rename built-in "eval" to "EVAL" Oct 12, 2014
CORE5.setting add CORE5.setting Sep 15, 2012
Cursor.pm6
CursorBase.pm6 [Cursor] Rewrite in Perl 6, bring under bootstrap control Jun 4, 2010
CursorBase.pmc get back into a self-hosting state Sep 18, 2014
DEBUG.pmc [STD,et al.] add explicit copyright notices at suggestion of diakopter++ Feb 6, 2010
LazyMap.pm
Makefile
NAME.pmc [STDeco] start transitioning to {*} proto stubs Jul 11, 2010
README
RE_ast.pmc
STD.pm [STD] better error message when loading STD withought having run make Jun 30, 2010
STD.pm6 demote bare say message in case of bogus term Feb 24, 2015
STD_P5.pm6 allow: require VERSION May 14, 2013
Stash.pmc
dist.ini Reboot and fix viv Feb 11, 2011
mangle.pl [STD] various changes in preparation for inlining p5 regex optimizations Aug 15, 2008
uniprops [Cursor] Following a so-simple-I-feel-stupid suggestion from pmurias+… Jun 18, 2010
viv

README

=head1 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.

=head1 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

=head1 Running Stuff

You can get started by using the Makefile command, C<make>.  This will convert
the Perl 6 grammar into a Perl 5 module, C<STD>.  C<STD> has a fairly simple
API; just call C<parse> as a class method with the source you want to parse as
a parameter, and look at the result.  Another module, C<Actions>, is provided
which converts C<STD>'s output into a more object-oriented form; see C<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 C<STD>:

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

* C<std> does the same, but also tests Actions.

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

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

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

* C<tloop> is an interactive STD syntax checker.

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

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

* C<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.

=head1 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 B<slow> - 20-75 minutes; also, it runs in a snapshot of
the current directory, so you can continue hacking):

 make snaptest

You can’t perform that action at this time.