PATH:
usr
/
share
/
doc
/
perl-Parse-RecDescent-1.967009
/
demo
#!/usr/bin/perl -ws # $::RD_TRACE = 1; # REMOVE COMMENTS FROM C++ CODE # ORIGINAL BY Helmut Jarausch # EXTENDED BY Damian Conway AND Helmut Jarausch AND Jeremy Braun use strict; use Parse::RecDescent; use vars qw/ $Grammar /; my $parser = new Parse::RecDescent $Grammar or die "invalid grammar"; undef $/; my $text = @ARGV ? <> : <DATA>; my $parts = $parser->program($text) or die "malformed C program"; print "Comments\n========\n$parts->{comments}\n"; print "\nCode\n====\n$parts->{code}\n"; print "\nStrings\n=======\n", map(qq{\t"$_"\n}, @{$parts->{strings}}); BEGIN { $Grammar=<<'EOF'; program : <rulevar: local $WithinComment=0> program : <rulevar: local $Comments = ""> /this shouldn't be here :-/ program : <reject> program : <reject> /with prejudice/ program : <rulevar: local $Code = ""> program : <rulevar: local @Strings> program : <skip:''> part(s) { { code=>$Code, comments=>$Comments, strings=>[@Strings]} } part : comment | C_code | string | charlit C_code : m{( [^"/]+ # one or more non-delimiters ( # then (optionally)... / # a potential comment delimiter [^*/] # which is not an actual delimiter )? # )+ # all repeated once or more }x { $Code .= $item[1] } string : m{" # a leading delimiter (( # zero or more... \\. # escaped anything | # or [^"] # anything but a delimiter )* ) "}x { $Code .= $item[1]; push @Strings, $1 } charlit : m{' # a leading delimiter (( # zero or more... \\. # escaped anything | # or [^'] # anything but a delimiter )* ) '}x { $Code .= $item[1]; push @Strings, $1 } comment : m{\s* # optional whitespace // # comment delimiter [^\n]* # anything except a newline \n # then a newline }x { $Code .= "\n"; $Comments .= $item[1] } | m{\s* # optional whitespace /\* # comment opener (?:[^*]+|\*(?!/))* # anything except */ \*/ # comment closer ([ \t]*)? # trailing blanks or tabs }x { $Code .= " "; $Comments .= $item[1] } EOF } __DATA__ program test; // for decomment // using Parse::RecDescent int main() { /* this should be removed */ char *cp1 = ""; char *cp2 = "cp2"; char c3 = 'c'; int i; // a counter // remove this line altogehter int k; int more_indented; // keep indentation int l; /* a loop variable */ // should be completely removed char *str = "/* ceci n'est pas un commentaire */"; return 0; }
[-] demo_cpp.pl
[edit]
[-] demo_autorule.pl
[edit]
[-] demo_errors.pl
[edit]
[-] demo_piecewise.pl
[edit]
[-] demo_logic.pl
[edit]
[-] demo_skipcomment.pl
[edit]
[-] demo_implicit.pl
[edit]
[-] demo_separators.pl
[edit]
[-] demo_perlparsing.pl
[edit]
[-] demo_street.pl
[edit]
[-] demo_scoredsep.pl
[edit]
[-] demo.c
[edit]
[-] demo_textgen.pl
[edit]
[-] demo.pl
[edit]
[-] demo_calc.pl
[edit]
[+]
..
[-] demo_another_Cgrammar.pl
[edit]
[-] demo_matchrule2.pl
[edit]
[-] demo_mccoy.pl
[edit]
[-] demo_restructure_painful.pl
[edit]
[-] demo_methods.pl
[edit]
[-] demo_language.pl
[edit]
[-] demo_selfmod.pl
[edit]
[-] demo_OOautoparsetree.pl
[edit]
[-] demo_codeblock.pl
[edit]
[-] demo_simplequery.pl
[edit]
[-] demo_restructure_easy.pl
[edit]
[-] demo_tokens.pl
[edit]
[-] demo_decomment.pl
[edit]
[-] demo_recipe.pl
[edit]
[-] demo_delete.pl
[edit]
[-] demo_lisplike.pl
[edit]
[-] demo_bad.pl
[edit]
[-] demo_arithmetic.pl
[edit]
[-] demo_leftassoc.pl
[edit]
[-] demo_PerlCSV.pl
[edit]
[-] demo_metaRD.pm
[edit]
[-] demo_derived.pl
[edit]
[-] demo_opreps.pl
[edit]
[-] demo_matchrule.pl
[edit]
[-] demo_LaTeXish_autoact.pl
[edit]
[-] demo_operator.pl
[edit]
[-] demo_autoscoresep.pl
[edit]
[-] demo_Cgrammar_v2.pl
[edit]
[-] demo_NL2SQL.pl
[edit]
[-] demo_Cgrammar.pl
[edit]
[-] demo_randomsentence.pl
[edit]
[-] demo_template.pl
[edit]
[-] demo_quicklist.pl
[edit]
[-] demo_itemhash.pl
[edit]
[-] demo_buildcalc.pl
[edit]
[-] demo_leftop.pl
[edit]
[-] demo_decomment_nonlocal.pl
[edit]
[-] demo_dot.pl
[edit]
[-] demo_LaTeXish.pl
[edit]
[-] demo_precalc.pl
[edit]
[-] demo_eval.pl
[edit]
[-] demo_autostub.pl
[edit]
[-] demo_whoson.pl
[edit]
[-] demo_lexer.pl
[edit]
[-] demo_OOparsetree.pl
[edit]
[-] demo_parsetree.pl
[edit]
[-] demo_simple.pl
[edit]
[-] demo_embedding.pl
[edit]
[-] demo_simpleXML.pl
[edit]
[-] demo_undumper.pl
[edit]