NAME
Parrot::Pmc2c::Parser - PMC Parser
SYNOPSIS
use Parrot::Pmc2c::Parser;
DESCRIPTION
Parrot::Pmc2c::Parser parses a sudo C syntax into a perl hash that is then dumped.
parse_pmc()
$parsed_pmc_hash = parse_pmc($pmc2cMain, $filename);
Purpose: Parse PMC code and return a hash ref of pmc attributes.
Arguments: List of two arguments:
- The pmc2cMain object
- Filename of the pmc to parse.
Return Values: Reference to a Parrot::Pmc2c::PMC object
Comments: Called by dump_pmc()
.
parse_top_level()
my ($preamble, $pmcname, $flags, $parents, $pmcbody, $post, $chewed_lines) = parse_top_level(\$code);
Purpose: Extract a pmc signature from the code ref.
Argument: PMC file contents slurped by parse_pmc()
.
Return Values: List of seven elements:
- the code found before the pmc signature;
- the name of the pmc
- a hash ref containing the flags associated with the pmc (such as
extends
andprovides
). - the list of parents this pmc extends
- the body of the pmc
- the code found after the pmc body
- number of newlines in the pmc signature that need to be added to the running total of lines in the file
Comments: Called internally by parse_pmc()
.
parse_flags()
my ($flags, $parents) = parse_flags($attributes, $pmcname);
Purpose: Extract a pmc signature from the code ref.
Argument: PMC file contents slurped by parse_pmc()
.
Return Values: List of two elements:
- a hash ref containing the flags associated with the pmc (such as
extends
andprovides
). - the list of parents this pmc extends
Comments: Called internally by parse_top_level()
.
extract_balanced()
($pmcbody, $post) = extract_balanced($code);
Purpose: Remove a balanced {}
construct from the beginning of $code
. Return it and the remaining code.
Argument: The code ref which was the first argument provided to parse_pmc()
.
Return Values: List of two elements:
- String beginning with
{
and ending with}
. In between is found C code where the comments hold strings of Perl comments written in POD. - String holding the balance of the code. Same style as first element, but without the braces.
Comments: Called twice within parse_pmc()
. Will die with error message Badly balanced
if not balanced.
parse_method_attrs()
$attrs = parse_method_attrs($method_attributes);
Purpose: Parse a list of method attributes and return a hash ref of them.
Arguments: String captured from regular expression.
Return Values: Reference to hash of attribute values.
Comments: Called within parse_pmc()
.