Skip to content

perl6/std

Folders and files

NameName
Last commit message
Last commit date

Latest commit

28329a7 · Feb 24, 2015
Sep 18, 2014
Jul 29, 2010
Jan 12, 2011
Jan 8, 2011
Oct 17, 2010
Jul 14, 2009
Sep 1, 2012
Oct 12, 2014
Sep 15, 2012
Jun 4, 2010
Jun 4, 2010
Sep 18, 2014
Feb 6, 2010
May 20, 2010
Sep 10, 2012
Jul 11, 2010
Nov 20, 2010
Jun 24, 2010
Jun 30, 2010
Feb 24, 2015
May 14, 2013
Feb 6, 2010
Feb 11, 2011
Aug 15, 2008
Jun 18, 2010
Sep 18, 2014

Repository files navigation

=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

About

(ARCHIVE) Raku standard grammar

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages