-
-
Notifications
You must be signed in to change notification settings - Fork 373
/
grammar.pg
67 lines (50 loc) · 1.35 KB
/
grammar.pg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Copyright (C) 2008, The Perl Foundation.
# $Id$
=begin Introduction
This is the rules portion of the grammar for the Rakudo document reader.
This grammar is based on the STD.pm grammar available from
L<http://svn.pugscode.org/pugs/src/perl6/STD.pm>.
=end Introduction
grammar Perl6doc::Grammar is PCT::Grammar;
token TOP { [ .*? <pod_comment> ]* {*} }
token unsp {
\\ <.before [\s|'#']>
[ \v | \h+ ]*
}
#### pod ####
## The <pod_comment> token is used to match perl 6 pod comments.
## It's currently incomplete, but so is the spec.
token pod_comment {
$<block>=[
| <pod_delimited_block>
| <pod_paragraph_block>
| <pod_abbreviated_block>
] \n {*}
}
token pod_delimited_block {
^^ '=' <.unsp>? 'begin' <.ws> <block_type> <pod_numbered>? <pod_option>* \n
$<body>=(.*?):!
^^ '=' <.unsp>? 'end' <.ws> $<block_type> \N*
{*}
}
token pod_numbered { <.ws> '#' <.ws> }
token pod_option {
[ \n '=' ]? <.ws>
$<option>=[ ':' [
| [ nested | numbered | term | formatted | like | allow ] >>
| <ident>
]
]
}
token pod_paragraph_block {
^^ '=for' <.ws> <block_type> <pod_option>* \n
$<body>=(.*?):!
<.before \n ^^ [ '=' | \h* $$ ]>
{*}
}
token pod_abbreviated_block {
^^ '=' <block_type> <.ws>
$<body>=(.*?):!
<.before \n ^^ [ '=' | \h* $$ ]>
}
token block_type { <ident> }