#!/usr/bin/perl use strict; # Enforces safer, clearer code. use warnings; # Detects common programming errors use Time::HiRes qw(gettimeofday); use Parse::RecDescent; #use Data::Dumper; #---------------------------------------------------------------------- # Build the grammar. #---------------------------------------------------------------------- my ($grammar); my ($startCompile,$startCompile2) = gettimeofday; $startCompile += ($startCompile2/1000000); $grammar = q { statement: ( function_method (';')(?) { $return = $item[1]; } | brace_statement (';')(?) { $return = $item[1]; } | stuff_we_ignore (';')(?) { $return = $item[1]; } )(s) function_method: 'function' identifier paren_statement brace_statement { $return = $item[2]; } brace_statement: '\{' statement '\}' { $return = $item[2]; } paren_statement: '(' statement ')' bracket_statement: '[' statement ']' stuff_we_ignore: ( paren_statement | bracket_statement | identifier | punctuators )(s?) { $return = ""; } identifier: /\w+/ punctuators: /[><=!~:&^%,\?\|\+\-\*\/\.]+/ }; #---------------------------------------------------------------------- # Grab the data and parse. #---------------------------------------------------------------------- my @localDeclaredVars = ; my $localDeclaredVar = join ' ', @localDeclaredVars; my $parser = new Parse::RecDescent ($grammar) or die "*** Bad grammar!\n"; my $i = 1; my ($endCompile,$endCompile2) = gettimeofday; $endCompile += ($endCompile2/1000000); my $refParsedValues = $parser->statement($localDeclaredVar) || print "*** $localDeclaredVar\n"; my ($parseEnd,$parseEnd2) = gettimeofday; $parseEnd += ($parseEnd2/1000000); #---------------------------------------------------------------------- # Flatten the array and print contents. #---------------------------------------------------------------------- #print Dumper(\@$refParsedValues); my (@flatarray); sub flatten_recurse { # Thanks Anomo map ref eq 'ARRAY' ? flatten_recurse(@$_) : $_, grep defined && length, @_; } @flatarray = flatten_recurse ($refParsedValues); print join "\n", @flatarray, "\n"; my ($appEnd,$appEnd2) = gettimeofday; $appEnd += ($appEnd2/1000000); print '-'x72 . "\n"; print "Compile Time: " . (sprintf "%2.3f", ($endCompile - $startCompile)) . " seconds\n"; print "Parse Time: " . (sprintf "%2.3f", ($parseEnd - $endCompile)) . " seconds\n"; print "Flatten Time: " . (sprintf "%2.3f", ($appEnd - $parseEnd)) . " seconds\n"; print "__________________________\n"; print "Total Time: " . (sprintf "%2.3f", ($appEnd - $startCompile)) . " seconds\n"; #---------------------------------------------------------------------- # End of program. #---------------------------------------------------------------------- __END__ function functStart () {}; var g1, g2 = __QUOTE__; var g3 = 10000000; if (g1) { var XXXXXXX = __QUOTE__; } if ( ! defaultCookieCrumbNav ) { cookieCrumbNavBarHTML = __QUOTE__ ; } else { function funct1 () { }; var xxx = __QUOTE__ ; } if (true == false) { alert(var1); } if (1) { if (1) { function funct2 (X) { x = funct3 (1,2); }; function funct3 () { alert(1); } } } function funct4 (a,b) { alert (1,2,3,4); return (a + b); } function funct5 () { var aaa = 1; } var g4; var g7 = __QUOTE__; function funct6 () { var b = __REGEX__; c = __REGEX__; if (test333()) { return true; } } function funct7 () { var a = 111; } alert ( 3 ); funct5 ( funct6 ( funct2 () ) ); function functEnd () {} #### functStart funct1 funct2 funct3 funct4 funct5 funct6 funct7 functEnd ------------------------------------------------------------------------ Compile Time: 0.270 seconds Parse Time: 0.691 seconds Flatten Time: 0.000 seconds __________________________ Total Time: 0.961 seconds #### function functStart () {}; function funct2 (X) { x = funct3 (1,2); }; function funct3 () { alert(1); } function funct4 (a,b) { alert (1,2,3,4); return (a + b); } function funct5 () { var aaa = 1; } function funct6 () { var b = __REGEX__; c = __REGEX__; if (test333()) { return true; } } function funct7 () { var a = 111; } function functEnd () {} ------------------------------------------------------------------------ Compile Time: 0.000 seconds Parse Time: 0.000 seconds Flatten Time: 0.000 seconds __________________________ Total Time: 0.000 seconds