NAME PPI - Parse and manipulate Perl code non-destructively, without using perl itself DESCRIPTION This is an in-development package for parsing, manipulating and saving perl code, without using the perl interpreter, the B modules, or any other hacks that use perl's inbuilt grammar. Please note that is project it intended as a mechanism for working with perl content, NOT to actually compile and run working perl applications. Thus, it provides only an approximation of the detail and flexibility available to the real perl parser, if a quite close approximation. It has been shown many times that it is impossible to FULLY "parse" Perl code without also executing it. We do not intend to fully parse it, just get enough details to analyse it, alter it, and save it back without losing details like whitespace, comments and other stuff lost when using the B:: modules. STATUS Tokenizer The Tokenizer can be considered complete, but with some remaining bugs that will be fixed over time. This should get gradually more accurate as special cases are found and handled, and more cruft is added. :) Lexer The basic framework of the lexer has been completely replaced. The new lexer should be sufficient, but the lex logic is far from complete, and so the parse tree may look kind of odd, but works for very basic statements. The classes and methods are roughly completed for the basic parse tree manipulation, but more advanced filters and such are yet to be written. Overall, the lexer is considered about three quarters complete. Syntax Highlighting The syntax highlighter is virtually unchanged, except that instead of working from an ( old style ) PPI::Document object, it pulls directly from a Tokenizer. This is temporary, and you should expect the entire PPI::Format tree to be overhauled and largely replaced once the lexer is completed. Other Functionality Given their current state, I have removed the entire PPI::Transform and PPI::Analysis trees from the upload. They are totally out of date, and will be replaced as the Lexer gets closer. One rewritten module, PPI::Analysis::Compare, is largely done and is currently in CPAN on it's own, as it relies on additional modules not needed by the core. Documentation I have started on the very beginning of the manual, which can be found at PPI::Manual. It's raw, incomplete, and subject to change. STRUCTURE This section provides a quick overview of all the classes in PPI, and their general layout and inheritance. We start with the main data classes, and then move on to the functional classes PPI::Base PPI::Element PPI::Node PPI::Document PPI::Statement PPI::Statement::Package PPI::Statement::Scheduled PPI::Statement::Expression PPI::Statement::Include PPI::Statement::Sub PPI::Statement::Variable PPI::Statement::Compound PPI::Statement::Break PPI::Statement::Null PPI::Structure PPI::Token TO DO Tokenizer Minor bug fixes and improvements are expected to be done as needed over time. Lexer - Finish the non-if compound statement lexing. - Add lex and statement support for labels. - Add support for statements that start with a block. Also, a rewritten filter/transform framework needs to be created on top of the basic lexer, to provide for the ability to add higher lever logic and capabilities. Other Stuff PPI::Format needs to be created properly, based on lex output rather than the raw token stream. PPI::Analysis packages will need to be rewritten... but they are likely to be largely third party, later. However, a base collection of search/find/filter/replace type methods probably need to be written centrally. Somewhere in there we also need a SAX filter to generate events based on perl structures, so various more complex processing tools can be written. Replacements or equivalents are needed for current methods that do POD extraction... some form of auto-doc can probably be written on top of that. Documentation Both user manuals and API documentation needs to get written. SUPPORT None. Don't use this for anything you don't want to have to rewrite. As this is changing, you probably need to be in contact with the author if you want to be using this. AUTHOR Adam Kennedy (Maintainer) cpan@ali.as http//ali.as/ COPYRIGHT Copyright (c) 2002-2004 Adam Kennedy. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module.