Join GitHub today
GitHub is home to over 36 million developers working together to host and review code, manage projects, and build software together.
Sign up
Perl 6 standard grammar
http://perl6.org/
Cannot retrieve the latest commit at this time.
| Type | Name | Latest commit message | Commit time |
|---|---|---|---|
| Failed to load latest commit information. | |||
|
|
boot |
|
|
|
|
inc |
|
|
|
|
lib |
|
|
|
|
std_hilite | ||
|
|
tools | ||
|
|
.gitignore |
|
|
|
|
Actions.pm |
|
|
|
|
CORE.setting |
|
|
|
|
CORE5.setting |
|
|
|
|
Cursor.pm6 | ||
|
|
CursorBase.pm6 |
|
|
|
|
CursorBase.pmc |
|
|
|
|
DEBUG.pmc |
|
|
|
|
LazyMap.pm | ||
|
|
Makefile | ||
|
|
NAME.pmc |
|
|
|
|
README | ||
|
|
RE_ast.pmc | ||
|
|
STD.pm |
|
|
|
|
STD.pm6 |
|
|
|
|
STD_P5.pm6 |
|
|
|
|
Stash.pmc | ||
|
|
dist.ini |
|
|
|
|
mangle.pl |
|
|
|
|
uniprops |
|
|
|
|
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