perl.recdescent http://www.nntp.perl.org/group/perl.recdescent/ ... Copyright 1998-2014 perl.org Thu, 28 Aug 2014 09:21:42 +0000 ask@perl.org Re: Global <skip> directive is quite literal by jtbraun Interesting. The global and in-rule skip directives are handled a bit <br/>differently. The in-rule directives essentially go through an eval <br/>step, where the text after the &#39;:&#39; and before the terminating &#39;&gt;&#39; is <br/>placed literally into the generated parser code as:<br/> $code .= &#39;$skip =&#39; . $1;<br/>So whatever whitespace and quoting structures you used get translated <br/>directly into the global eval() of the generated parser.<br/><br/>The global skip directive feeds the extracted skip directive text into a <br/>variable that is then put into the parser code as something like:<br/> $code .= &#39;$skip = \&#39;$1\&#39;&#39;;<br/><br/>Later the internal $skip variable is used in a regex something like:<br/> if ($text =~ s/\A($skip)//) { SkipMatched(); ...}<br/><br/>So in instances where the skip directive contents could be quoted via <br/>single quotes into something that would work as a variable interpolated <br/>into a regex, the global directive works. Otherwise, you get odd <br/>behavior, as you noticed.<br/><br/>The correct thing to do is for P::RD to treat the global skip the same <br/>as it does everything else, and require that you quote the contents of <br/>the skip directive, and eval the result in the generated parser. I&#39;ve <br/>made these changes here:<br/> https://github.com/jtbraun/Parse-RecDescent/tree/global_skip<br/><br/>And would appreciate it if you&#39;d give them a try before I merge them <br/>back into the main line and push an update to PAUSE (and a bug would be <br/>appreciated).<br/><br/>Additionally, one of your test cases will fail unexpectedly:<br/><br/> try_grammar(&#39;bare skip, plus sign&#39;,undef,&quot;&lt;skip:\\s+&gt;&quot;);<br/><br/>The generated parser always attempts to match $skip before a terminal, <br/>including the first one. There&#39;s no whitespace at the beginning of your <br/>string, which will lead to a failure to parse.<br/><br/>Thanks for the report,<br/><br/>Jeremy<br/><br/><br/>On 03/31/2013 08:25 AM, yary wrote:<br/>&gt; I&#39;ve been trying to get a global &lt;skip&gt; directive- before all rule<br/>&gt; definitions- to work, and it seems it must not be quoted or have any<br/>&gt; spaces. It seems to run counter to the Parse::RecDescent<br/>&gt; documantation. Following is code, I would expect each variant to<br/>&gt; parse, but only the first 2 are OK, and the last crashes with<br/>&gt; &quot;Internal error in generated parser code!&quot;. Is that intended, or<br/>&gt; should I file a bug report?<br/>&gt;<br/>&gt; -y<br/>&gt;<br/>&gt; #!/usr/bin/env perl<br/>&gt; use warnings;<br/>&gt; use strict;<br/>&gt; use Parse::RecDescent;<br/>&gt;<br/>&gt; $::RD_WARN=1;<br/>&gt;<br/>&gt; my $plain_grammar=&#39;words : (/\w+/)(s) /\Z/&#39;;<br/>&gt;<br/>&gt; sub try_grammar {<br/>&gt; my ($name, $trace, $definition)=@_;<br/>&gt; print $name,&quot;: $definition = &quot;;<br/>&gt; print $::RD_HINT=$::RD_TRACE=$trace if defined $trace;<br/>&gt; my $grammar = Parse::RecDescent-&gt;new(&quot;$definition\n$plain_grammar&quot;);<br/>&gt; print defined $grammar-&gt;words(&quot;Please work&quot;) ? &quot;OK&quot; : &quot;Didn&#39;t parse&quot;;<br/>&gt; print &quot;\n&quot;;<br/>&gt; undef $::RD_HINT,$::RD_TRACE;<br/>&gt; }<br/>&gt;<br/>&gt; try_grammar(&#39;no skip directive&#39;,undef,&#39;&#39;);<br/>&gt; try_grammar(&#39;bare skip&#39;,undef,&quot;&lt;skip:\\s*&gt;&quot;);<br/>&gt; try_grammar(&#39;bare skip, with a preceeding space&#39;,undef,&quot;&lt;skip: \\s*&gt;&quot;);<br/>&gt; try_grammar(&#39;bare skip, plus sign&#39;,undef,&quot;&lt;skip:\\s+&gt;&quot;);<br/>&gt; try_grammar(&#39;qr skip&#39;,undef,&quot;&lt;skip: qr/\\s*/&gt;&quot;);<br/>&gt; try_grammar(&#39;apostrophe skip&#39;,1,&quot;&lt;skip: &#39;\\s*&#39;&gt;&quot;);<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2013/04/msg562.html Tue, 02 Apr 2013 03:04:14 +0000 Global <skip> directive is quite literal by yary I&#39;ve been trying to get a global &lt;skip&gt; directive- before all rule<br/>definitions- to work, and it seems it must not be quoted or have any<br/>spaces. It seems to run counter to the Parse::RecDescent<br/>documantation. Following is code, I would expect each variant to<br/>parse, but only the first 2 are OK, and the last crashes with<br/>&quot;Internal error in generated parser code!&quot;. Is that intended, or<br/>should I file a bug report?<br/><br/>-y<br/><br/>#!/usr/bin/env perl<br/>use warnings;<br/>use strict;<br/>use Parse::RecDescent;<br/><br/>$::RD_WARN=1;<br/><br/>my $plain_grammar=&#39;words : (/\w+/)(s) /\Z/&#39;;<br/><br/>sub try_grammar {<br/> my ($name, $trace, $definition)=@_;<br/> print $name,&quot;: $definition = &quot;;<br/> print $::RD_HINT=$::RD_TRACE=$trace if defined $trace;<br/> my $grammar = Parse::RecDescent-&gt;new(&quot;$definition\n$plain_grammar&quot;);<br/> print defined $grammar-&gt;words(&quot;Please work&quot;) ? &quot;OK&quot; : &quot;Didn&#39;t parse&quot;;<br/> print &quot;\n&quot;;<br/> undef $::RD_HINT,$::RD_TRACE;<br/>}<br/><br/>try_grammar(&#39;no skip directive&#39;,undef,&#39;&#39;);<br/>try_grammar(&#39;bare skip&#39;,undef,&quot;&lt;skip:\\s*&gt;&quot;);<br/>try_grammar(&#39;bare skip, with a preceeding space&#39;,undef,&quot;&lt;skip: \\s*&gt;&quot;);<br/>try_grammar(&#39;bare skip, plus sign&#39;,undef,&quot;&lt;skip:\\s+&gt;&quot;);<br/>try_grammar(&#39;qr skip&#39;,undef,&quot;&lt;skip: qr/\\s*/&gt;&quot;);<br/>try_grammar(&#39;apostrophe skip&#39;,1,&quot;&lt;skip: &#39;\\s*&#39;&gt;&quot;);<br/> http://www.nntp.perl.org/group/perl.recdescent/2013/03/msg561.html Sun, 31 Mar 2013 15:26:17 +0000 Re: How to build parser with autostubbing by jtbraun@cpan.org Yuri,<br/><br/>Thank you for the bug report. I&#39;ve release version 1.967001 on CPAN, <br/>which should address these issues for you.<br/><br/>Thanks again!<br/>Jeremy<br/><br/><br/>On 1/12/2012 1:42 PM, jtbraun@cpan.org wrote:<br/>&gt; So, this works to set RD_TRACE:<br/>&gt; perl -MParse::RecDescent -s - -RD_TRACE grammar NewMakepp::Grammar<br/>&gt;<br/>&gt; Unfortunately, it looks like the path taken by the precompilation <br/>&gt; fails to actually check for undefined rules. This may be a bug, or <br/>&gt; may have been intentional, I&#39;ll have to follow up with Damian.<br/>&gt;<br/>&gt; Even if this were fixed, I&#39;m not sure how useful the &#39;-s&#39; command line <br/>&gt; option is, as -RD_AUTOSTUB will set $::RD_AUTOSTUB to &#39;1&#39;. An <br/>&gt; undocumented feature of $::RD_AUTOSTUB is that if it has a <br/>&gt; boolean-true value, an undefined rule named &#39;foo&#39; will not get the <br/>&gt; production<br/>&gt; foo: &#39;foo&#39;<br/>&gt; but instead get the production:<br/>&gt; foo: $::RD_AUTOSTUB<br/>&gt; Which, for -s -RD_AUTOSTUB, will generate:<br/>&gt; foo: &#39;1&#39;<br/>&gt; 1: &#39;1&#39;<br/>&gt; Which probably isn&#39;t what you wanted in the first place.<br/>&gt;<br/>&gt; Long story short, RD_AUTOSTUB doesn&#39;t currently work with <br/>&gt; precompilation of parsers. You&#39;ll have to either not precompile, or <br/>&gt; define your own stub productions.<br/>&gt;<br/>&gt; Please file a ticket for this issue. I&#39;m out of town for the next <br/>&gt; week, but will try to get this into a bugfix release next week. I&#39;ve <br/>&gt; included details on the issue below, feel free to include them in the <br/>&gt; bug. You can find the ticket tracker for Parse::RecDescent here:<br/>&gt; https://rt.cpan.org/Public/Dist/Display.html?Name=Parse-RecDescent<br/>&gt;<br/>&gt;<br/>&gt;<br/>&gt; Note that this isn&#39;t unique to the command line, but appears to be a <br/>&gt; problem with the Precompile method. The callstack is something like:<br/>&gt; script: Parse::RecDescent-&gt;Precompile($grammar, $class, <br/>&gt; $sourcefile)<br/>&gt; Precompile: $self = Parse::RecDescent-&gt;new($grammar,1,$class)<br/>&gt; new: $self-&gt;Replace($grammar, 1, $class)<br/>&gt; Replace: _generate($self, $grammar, 1(fromsplice), 1, $class);<br/>&gt; _generate: my ($self, $grammar, $replace, $isimplicit, $isleftop) <br/>&gt; = (@_, 0);<br/>&gt;<br/>&gt; So, the &#39;1&#39; added to @_ from Precompile in the call to new() ends up <br/>&gt; becoming $isimplicit.<br/>&gt;<br/>&gt; $isimplicit prevents $self-&gt;_check_grammar() from being called, which <br/>&gt; is the function that does the RD_AUTOSTUB checking/generation. I&#39;ll <br/>&gt; have to look into why _check_grammar is skipped for $isimplicit cases.<br/>&gt;<br/>&gt; There also appears to be another bug here, where the $class parameter <br/>&gt; gets incorrectly propagated from Precompile into $isleftop inside of <br/>&gt; _generate, which is probably not correct. Unless I&#39;ve misread the <br/>&gt; code somewhere.<br/>&gt;<br/>&gt;<br/>&gt; On 1/12/2012 10:01 AM, Yuri Shtil wrote:<br/>&gt;&gt; Well, I found as much myself, tried all I could and it did not work.<br/>&gt;&gt;<br/>&gt;&gt; -----Original Message-----<br/>&gt;&gt; From: jtbraun@cpan.org [mailto:jtbraun@cpan.org]<br/>&gt;&gt; Sent: Thursday, January 12, 2012 9:53 AM<br/>&gt;&gt; To: recdescent@perl.org<br/>&gt;&gt; Subject: Re: How to build parser with autostubbing<br/>&gt;&gt;<br/>&gt;&gt; Consult the section on &#39;-s&#39; at http://perldoc.perl.org/perlrun.html:<br/>&gt;&gt;<br/>&gt;&gt; -s<br/>&gt;&gt;<br/>&gt;&gt; enables rudimentary switch parsing for switches on the command line<br/>&gt;&gt; after the program name but before any filename arguments (or before<br/>&gt;&gt; an argument of --). Any switch found there is removed from @ARGV <br/>&gt;&gt; and<br/>&gt;&gt; sets the corresponding variable in the Perl program. The following<br/>&gt;&gt; program prints &quot;1&quot; if the program is invoked with a -xyz switch, <br/>&gt;&gt; and<br/>&gt;&gt; &quot;abc&quot; if it is invoked with -xyz=abc.<br/>&gt;&gt; #!/usr/bin/perl -s<br/>&gt;&gt; if ($xyz) { print &quot;$xyz\n&quot; }<br/>&gt;&gt;<br/>&gt;&gt; Do note that a switch like --help creates the variable ${-help} ,<br/>&gt;&gt; which is not compliant with use strict &quot;refs&quot; . Also, when using<br/>&gt;&gt; this option on a script with warnings enabled you may get a lot of<br/>&gt;&gt; spurious &quot;used only once&quot; warnings.<br/>&gt;&gt;<br/>&gt;&gt;<br/>&gt;&gt; So this is probably what you want:<br/>&gt;&gt;<br/>&gt;&gt; perl -MParse::RecDescent -s -RD_AUTOSTUB - grammar <br/>&gt;&gt; NewMakepp::Grammar<br/>&gt;&gt;<br/>&gt;&gt; Untested, you may need to move -s, &#39;-RD_AUTOSTUB and the &#39;- grammar <br/>&gt;&gt; ...&#39; arguments around to make it work.<br/>&gt;&gt;<br/>&gt;&gt; On 1/12/2012 9:39 AM, Yuri Shtil wrote:<br/>&gt;&gt;&gt; The documentation is a little unclear<br/>&gt;&gt;&gt;<br/>&gt;&gt;&gt; I use perl -MParse::RecDescent - grammar NewMakepp::Grammar to <br/>&gt;&gt;&gt; create a parser module.<br/>&gt;&gt;&gt;<br/>&gt;&gt;&gt; What do I do in order to generate stubs for undefined rules?<br/>&gt;&gt;&gt; How do I pass RD_AUTOSTUB?<br/>&gt;&gt;&gt;<br/>&gt;&gt;&gt; ----------------------------------------------------------------------<br/>&gt;&gt;&gt; ------------- This email message is for the sole use of the intended<br/>&gt;&gt;&gt; recipient(s) and may contain confidential information. Any<br/>&gt;&gt;&gt; unauthorized review, use, disclosure or distribution is prohibited.<br/>&gt;&gt;&gt; If you are not the intended recipient, please contact the sender by<br/>&gt;&gt;&gt; reply email and destroy all copies of the original message.<br/>&gt;&gt;&gt; ----------------------------------------------------------------------<br/>&gt;&gt;&gt; -------------<br/>&gt;&gt;&gt;<br/>&gt;<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg560.html Sat, 28 Jan 2012 21:19:27 +0000 Manufacturers Of Amoxicillin by roccobarocco2016tk Rogaine And Birth Defects Generic Propecia Lasts Herbal Viagra &lt;a<br/>href=http://www.netvibes.com/katze2012&gt;Buy Paypal Prescription<br/>Tramadol&lt;/a&gt; Cymbalta Adderall Xr Tramadol And Ulcers Pain Reliever<br/>Supplied Buy Lasix Online Arimidex Online Adresse &lt;a<br/>href=http://www.netvibes.com/singulair10mg&gt;Montelukast Online Buy<br/>Singulair Online&lt;/a&gt; Prescription Tramadol Online Herbal Remedies Cialis<br/>Cialis Soft Mexico Offer T L Phones Sp Cialis S &lt;a<br/>href=http://www.netvibes.com/drlivingston&gt;Properties Of Zolpidem&lt;/a&gt;<br/>Prozac Drowsiness Symptoms Of Ultram Cases Is Viagra A Pill Wikipedia <br/>Will Give Me Energy Prozac 20 Mg &lt;a<br/>href=http://www.netvibes.com/ultram&gt;Utram No Prescription Buy Cheapest&lt;/a&gt;<br/>Lorazepam And Dosage Side Effects Ratio Baclofen Sodium Starch Glycolate<br/>Tramadol Is A Controlled Substance Methotrexate Live Vaccine Mouth Sores<br/>&lt;a href=http://www.netvibes.com/amoxicillinnoprescription&gt;amoxicillin<br/>reaction&lt;/a&gt; Methotrexate Neuralgia Lamsa Ativan Eddie Cialis Amoxicillin<br/>Multiple Sclerosis &lt;a href=http://www.netvibes.com/lisinopril&gt;lisinopril<br/>neuropathy&lt;/a&gt; Prozac Biography Amoxicillin Dose Yeast Infection Levitra<br/>Non Prescription Online Pharmacy Buy Viagra Amoxicillin Side Effects<br/>Babies Diaper Rash Amoxicillin Dosage Birth Control How Long Doo Ultram<br/>Withdrawals Last <br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg559.html Fri, 13 Jan 2012 00:21:52 +0000 Re: How to build parser with autostubbing by jtbraun@cpan.org So, this works to set RD_TRACE:<br/> perl -MParse::RecDescent -s - -RD_TRACE grammar NewMakepp::Grammar<br/><br/>Unfortunately, it looks like the path taken by the precompilation fails to actually check for undefined rules. This may be a bug, or may have been intentional, I&#39;ll have to follow up with Damian.<br/><br/>Even if this were fixed, I&#39;m not sure how useful the &#39;-s&#39; command line option is, as -RD_AUTOSTUB will set $::RD_AUTOSTUB to &#39;1&#39;. An undocumented feature of $::RD_AUTOSTUB is that if it has a boolean-true value, an undefined rule named &#39;foo&#39; will not get the production<br/> foo: &#39;foo&#39;<br/>but instead get the production:<br/> foo: $::RD_AUTOSTUB<br/>Which, for -s -RD_AUTOSTUB, will generate:<br/> foo: &#39;1&#39;<br/> 1: &#39;1&#39;<br/>Which probably isn&#39;t what you wanted in the first place.<br/><br/>Long story short, RD_AUTOSTUB doesn&#39;t currently work with precompilation of parsers. You&#39;ll have to either not precompile, or define your own stub productions.<br/><br/>Please file a ticket for this issue. I&#39;m out of town for the next week, but will try to get this into a bugfix release next week. I&#39;ve included details on the issue below, feel free to include them in the bug. You can find the ticket tracker for Parse::RecDescent here:<br/>https://rt.cpan.org/Public/Dist/Display.html?Name=Parse-RecDescent<br/><br/><br/> <br/>Note that this isn&#39;t unique to the command line, but appears to be a problem with the Precompile method. The callstack is something like:<br/> script: Parse::RecDescent-&gt;Precompile($grammar, $class, $sourcefile)<br/> Precompile: $self = Parse::RecDescent-&gt;new($grammar,1,$class)<br/> new: $self-&gt;Replace($grammar, 1, $class)<br/> Replace: _generate($self, $grammar, 1(fromsplice), 1, $class);<br/> _generate: my ($self, $grammar, $replace, $isimplicit, $isleftop) = (@_, 0);<br/><br/>So, the &#39;1&#39; added to @_ from Precompile in the call to new() ends up becoming $isimplicit.<br/><br/>$isimplicit prevents $self-&gt;_check_grammar() from being called, which is the function that does the RD_AUTOSTUB checking/generation. I&#39;ll have to look into why _check_grammar is skipped for $isimplicit cases.<br/><br/>There also appears to be another bug here, where the $class parameter gets incorrectly propagated from Precompile into $isleftop inside of _generate, which is probably not correct. Unless I&#39;ve misread the code somewhere.<br/><br/><br/>On 1/12/2012 10:01 AM, Yuri Shtil wrote:<br/>&gt; Well, I found as much myself, tried all I could and it did not work.<br/>&gt;<br/>&gt; -----Original Message-----<br/>&gt; From: jtbraun@cpan.org [mailto:jtbraun@cpan.org]<br/>&gt; Sent: Thursday, January 12, 2012 9:53 AM<br/>&gt; To: recdescent@perl.org<br/>&gt; Subject: Re: How to build parser with autostubbing<br/>&gt;<br/>&gt; Consult the section on &#39;-s&#39; at http://perldoc.perl.org/perlrun.html:<br/>&gt;<br/>&gt; -s<br/>&gt;<br/>&gt; enables rudimentary switch parsing for switches on the command line<br/>&gt; after the program name but before any filename arguments (or before<br/>&gt; an argument of --). Any switch found there is removed from @ARGV and<br/>&gt; sets the corresponding variable in the Perl program. The following<br/>&gt; program prints &quot;1&quot; if the program is invoked with a -xyz switch, and<br/>&gt; &quot;abc&quot; if it is invoked with -xyz=abc.<br/>&gt; #!/usr/bin/perl -s<br/>&gt; if ($xyz) { print &quot;$xyz\n&quot; }<br/>&gt;<br/>&gt; Do note that a switch like --help creates the variable ${-help} ,<br/>&gt; which is not compliant with use strict &quot;refs&quot; . Also, when using<br/>&gt; this option on a script with warnings enabled you may get a lot of<br/>&gt; spurious &quot;used only once&quot; warnings.<br/>&gt;<br/>&gt;<br/>&gt; So this is probably what you want:<br/>&gt;<br/>&gt; perl -MParse::RecDescent -s -RD_AUTOSTUB - grammar NewMakepp::Grammar<br/>&gt;<br/>&gt; Untested, you may need to move -s, &#39;-RD_AUTOSTUB and the &#39;- grammar ...&#39; arguments around to make it work.<br/>&gt;<br/>&gt; On 1/12/2012 9:39 AM, Yuri Shtil wrote:<br/>&gt;&gt; The documentation is a little unclear<br/>&gt;&gt;<br/>&gt;&gt; I use perl -MParse::RecDescent - grammar NewMakepp::Grammar to create a parser module.<br/>&gt;&gt;<br/>&gt;&gt; What do I do in order to generate stubs for undefined rules?<br/>&gt;&gt; How do I pass RD_AUTOSTUB?<br/>&gt;&gt;<br/>&gt;&gt; ----------------------------------------------------------------------<br/>&gt;&gt; ------------- This email message is for the sole use of the intended<br/>&gt;&gt; recipient(s) and may contain confidential information. Any<br/>&gt;&gt; unauthorized review, use, disclosure or distribution is prohibited.<br/>&gt;&gt; If you are not the intended recipient, please contact the sender by<br/>&gt;&gt; reply email and destroy all copies of the original message.<br/>&gt;&gt; ----------------------------------------------------------------------<br/>&gt;&gt; -------------<br/>&gt;&gt;<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg558.html Thu, 12 Jan 2012 13:42:32 +0000 RE: How to build parser with autostubbing by Yuri Shtil Well, I found as much myself, tried all I could and it did not work.<br/><br/>-----Original Message-----<br/>From: jtbraun@cpan.org [mailto:jtbraun@cpan.org] <br/>Sent: Thursday, January 12, 2012 9:53 AM<br/>To: recdescent@perl.org<br/>Subject: Re: How to build parser with autostubbing<br/><br/>Consult the section on &#39;-s&#39; at http://perldoc.perl.org/perlrun.html:<br/><br/> -s<br/><br/> enables rudimentary switch parsing for switches on the command line<br/> after the program name but before any filename arguments (or before<br/> an argument of --). Any switch found there is removed from @ARGV and<br/> sets the corresponding variable in the Perl program. The following<br/> program prints &quot;1&quot; if the program is invoked with a -xyz switch, and<br/> &quot;abc&quot; if it is invoked with -xyz=abc.<br/> #!/usr/bin/perl -s<br/> if ($xyz) { print &quot;$xyz\n&quot; }<br/><br/> Do note that a switch like --help creates the variable ${-help} ,<br/> which is not compliant with use strict &quot;refs&quot; . Also, when using<br/> this option on a script with warnings enabled you may get a lot of<br/> spurious &quot;used only once&quot; warnings.<br/><br/><br/>So this is probably what you want:<br/><br/> perl -MParse::RecDescent -s -RD_AUTOSTUB - grammar NewMakepp::Grammar<br/><br/>Untested, you may need to move -s, &#39;-RD_AUTOSTUB and the &#39;- grammar ...&#39; arguments around to make it work.<br/><br/>On 1/12/2012 9:39 AM, Yuri Shtil wrote:<br/>&gt; The documentation is a little unclear<br/>&gt;<br/>&gt; I use perl -MParse::RecDescent - grammar NewMakepp::Grammar to create a parser module.<br/>&gt;<br/>&gt; What do I do in order to generate stubs for undefined rules?<br/>&gt; How do I pass RD_AUTOSTUB?<br/>&gt;<br/>&gt; ----------------------------------------------------------------------<br/>&gt; ------------- This email message is for the sole use of the intended <br/>&gt; recipient(s) and may contain confidential information. Any <br/>&gt; unauthorized review, use, disclosure or distribution is prohibited. <br/>&gt; If you are not the intended recipient, please contact the sender by <br/>&gt; reply email and destroy all copies of the original message.<br/>&gt; ----------------------------------------------------------------------<br/>&gt; -------------<br/>&gt;<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg557.html Thu, 12 Jan 2012 10:02:08 +0000 Re: How to build parser with autostubbing by jtbraun Consult the section on &#39;-s&#39; at http://perldoc.perl.org/perlrun.html:<br/><br/> -s<br/><br/> enables rudimentary switch parsing for switches on the command line<br/> after the program name but before any filename arguments (or before<br/> an argument of --). Any switch found there is removed from @ARGV and<br/> sets the corresponding variable in the Perl program. The following<br/> program prints &quot;1&quot; if the program is invoked with a -xyz switch, and<br/> &quot;abc&quot; if it is invoked with -xyz=abc.<br/> #!/usr/bin/perl -s<br/> if ($xyz) { print &quot;$xyz\n&quot; }<br/><br/> Do note that a switch like --help creates the variable ${-help} ,<br/> which is not compliant with use strict &quot;refs&quot; . Also, when using<br/> this option on a script with warnings enabled you may get a lot of<br/> spurious &quot;used only once&quot; warnings.<br/><br/><br/>So this is probably what you want:<br/><br/> perl -MParse::RecDescent -s -RD_AUTOSTUB - grammar NewMakepp::Grammar<br/><br/>Untested, you may need to move -s, &#39;-RD_AUTOSTUB and the &#39;- grammar <br/>...&#39; arguments around to make it work.<br/><br/>On 1/12/2012 9:39 AM, Yuri Shtil wrote:<br/>&gt; The documentation is a little unclear<br/>&gt;<br/>&gt; I use perl -MParse::RecDescent - grammar NewMakepp::Grammar to create a parser module.<br/>&gt;<br/>&gt; What do I do in order to generate stubs for undefined rules?<br/>&gt; How do I pass RD_AUTOSTUB?<br/>&gt;<br/>&gt; -----------------------------------------------------------------------------------<br/>&gt; This email message is for the sole use of the intended recipient(s) and may contain<br/>&gt; confidential information. Any unauthorized review, use, disclosure or distribution<br/>&gt; is prohibited. If you are not the intended recipient, please contact the sender by<br/>&gt; reply email and destroy all copies of the original message.<br/>&gt; -----------------------------------------------------------------------------------<br/>&gt;<br/><br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg556.html Thu, 12 Jan 2012 09:53:16 +0000 How to build parser with autostubbing by Yuri Shtil The documentation is a little unclear<br/><br/>I use perl -MParse::RecDescent - grammar NewMakepp::Grammar to create a parser module.<br/><br/>What do I do in order to generate stubs for undefined rules?<br/>How do I pass RD_AUTOSTUB?<br/><br/>-----------------------------------------------------------------------------------<br/>This email message is for the sole use of the intended recipient(s) and may contain<br/>confidential information. Any unauthorized review, use, disclosure or distribution<br/>is prohibited. If you are not the intended recipient, please contact the sender by<br/>reply email and destroy all copies of the original message.<br/>-----------------------------------------------------------------------------------<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg555.html Thu, 12 Jan 2012 09:39:16 +0000 Re: parsing make like syntax by jtbraun I&#39;ve assumed that you have your value to be substituted in a scalar<br/>variable, that substitutions allowed to introduce new variable<br/>references ( $($(foo)) with foo=&quot;$(bar) =&gt; $($(bar)) which would then<br/>substitute bar)<br/><br/>I&#39;ve also assumed that variable names can only contain characters<br/>matching \w. This means that the innermost substitutions (the innermost<br/>ones) should match m/$\(\w+\)/.<br/><br/>Something like this should work:<br/><br/> my %subst = ( foo =&gt; &#39;$(bar)&#39;,<br/> bar =&gt; &#39;baz&#39;,<br/> abcbazdef =&gt; &#39;HELLO&#39;,<br/> );<br/> my $val = &#39;$(abc$(foo)def)&#39;;<br/><br/> while ($val =~ s/\$\((\w+)\)/$subst{$1}/e) {<br/> print &quot;VAL $val\n&quot;;<br/> }<br/><br/> print &quot;$val\n&quot;;<br/><br/>I&#39;ve left out any error checking for undefined values in %subst and the<br/>like.<br/><br/>Using Parse::RecDescent to do this directly would require that you<br/>define a rule something like the following, with $skip probably set to &#39;&#39;:<br/><br/> varvalue: &#39;$(&#39; /\w+/ &#39;)&#39;<br/> | &#39;$(&#39; /MATCHALLOWEDLITERAL/ substitution /MATCHALLOWEDLITERAL/ &#39;)&#39;<br/> | /MATCHALLOWEDLITERAL/<br/><br/>The downside of this is that you probably won&#39;t be able to easily handle<br/>all cases of recursive substitutions as shown above. You may be able to<br/>modify $text in the actions for the first two rules above, and make it<br/>work. But I&#39;m assuming you&#39;ve already got a rule that contains <br/>/$RE{balanced}{-parens=&gt;&#39;()&#39;}/, and providing a modified version of the<br/>example action above probably gets you where you want to go.<br/><br/>Jeremy<br/><br/>On 1/11/2012 3:52 PM, Yuri Shtil wrote:<br/>&gt; Hi,<br/>&gt;<br/>&gt; I need to parse make variable reference like syntax:<br/>&gt;<br/>&gt; $($(foo))<br/>&gt;<br/>&gt; $(foo) should be detected first, replaced (let&#39;s say with bar) and resultant string $(bar) should be parsed the same way.<br/>&gt; There can be any number of nested references like<br/>&gt;<br/>&gt; $(abc$(foo)def)<br/>&gt;<br/>&gt; Any suggestions how to define rules for this?<br/>&gt;<br/>&gt; I used Regexp::Common to detect balanced parenthesis.<br/>&gt;<br/>&gt;<br/>&gt; -----------------------------------------------------------------------------------<br/>&gt; This email message is for the sole use of the intended recipient(s) and may contain<br/>&gt; confidential information. Any unauthorized review, use, disclosure or distribution<br/>&gt; is prohibited. If you are not the intended recipient, please contact the sender by<br/>&gt; reply email and destroy all copies of the original message.<br/>&gt; -----------------------------------------------------------------------------------<br/>&gt;<br/><br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg554.html Wed, 11 Jan 2012 16:49:05 +0000 parsing make like syntax by Yuri Shtil Hi,<br/><br/>I need to parse make variable reference like syntax:<br/><br/>$($(foo))<br/><br/>$(foo) should be detected first, replaced (let&#39;s say with bar) and resultant string $(bar) should be parsed the same way.<br/>There can be any number of nested references like<br/><br/>$(abc$(foo)def)<br/><br/>Any suggestions how to define rules for this?<br/><br/>I used Regexp::Common to detect balanced parenthesis.<br/><br/><br/>-----------------------------------------------------------------------------------<br/>This email message is for the sole use of the intended recipient(s) and may contain<br/>confidential information. Any unauthorized review, use, disclosure or distribution<br/>is prohibited. If you are not the intended recipient, please contact the sender by<br/>reply email and destroy all copies of the original message.<br/>-----------------------------------------------------------------------------------<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg553.html Wed, 11 Jan 2012 15:53:06 +0000 Re: How to access a variable from the grammar code by Damian Conway On 11 January 2012 03:54, Yuri Shtil &lt;yshtil@nvidia.com&gt; asked:<br/><br/>&gt; Is there an elegant way to pass a parameter to the Parse::RecDescent<br/>&gt; constructor and access it from the actions?<br/><br/>I&#39;m afraid there isn&#39;t.<br/><br/>The best workaround is probably to make the shared resource an attribute<br/>of the parser object (instead of using an external variable) and then<br/>access it within the grammar via $thisparser. Like so:<br/><br/>my $grammar = q{<br/> startrule: a b c {$thisparser-&gt;{sc_obj}-&gt;method}<br/>...<br/>};<br/><br/>sub action {<br/> my $parser = Parse::RecDescent-&gt;new($grammar);<br/> $parser-&gt;{sc_obj} = SomeClass-&gt;new();<br/> $parser-&gt;startrule($sometext);<br/>}<br/><br/><br/>Damian<br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg552.html Tue, 10 Jan 2012 15:35:18 +0000 How to access a variable from the grammar code by Yuri Shtil I use OO perl and created a class that uses recdecent.<br/>I want to access method variables from the grammar actions. Is there an elegant way to pass a parameter to the Parse::RecDescent constructor and access it from the actions?<br/><br/>I used an awkward construct and I don&#39;t like it:<br/><br/>-----<br/><br/>Package Foo;<br/><br/>our $var;<br/><br/>...<br/>my $grammar = &#39;...<br/># Capture the object instance<br/>my $object = Foo::$var;<br/>startrule: a b c {$object-&gt;method}&#39;<br/><br/>...<br/><br/>sub action {<br/># Capture $var<br/> $var = SOmeClass-&gt;new();<br/># $var is used in grammar<br/>my $parser = Parse::RecDescent ($grammar);<br/>$parser-&gt;startrule(SomeText);<br/>}<br/><br/><br/>Also I think this would not work with Precompile.<br/><br/>-----------------------------------------------------------------------------------<br/>This email message is for the sole use of the intended recipient(s) and may contain<br/>confidential information. Any unauthorized review, use, disclosure or distribution<br/>is prohibited. If you are not the intended recipient, please contact the sender by<br/>reply email and destroy all copies of the original message.<br/>-----------------------------------------------------------------------------------<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2012/01/msg551.html Tue, 10 Jan 2012 08:55:06 +0000 Re: Line by line parsing by Damian Conway Hi Nikolay,<br/><br/>Your grammar allows a line to be completely empty<br/>at the end of the input, so the end sequence is:<br/><br/> Try to match Line against &#39;ccccc&#39;<br/> Match<br/> Input is now &#39;&#39;<br/> Try to match Line against &#39;&#39;<br/> Match<br/> Parser detects no change in the input and terminates.<br/><br/>What you actually want is to parse lines that are *separated*<br/>by newlines. RecDescent has a convenient way of doing that:<br/><br/> Rulename(s /separator/)<br/><br/>So you could rewrite your grammar like so:<br/><br/> my $grammar = q{<br/> Page:<br/> &lt;skip:&#39;&#39;&gt;<br/> Line(s /\n/) {print &quot;Finished! \n&quot;}<br/><br/> Line:<br/> /[^\n]*/ {print &quot;Line: &#39;$item[1]&#39;\n&quot;}<br/> };<br/><br/>Try this version and you&#39;ll get what you expected.<br/><br/>Note also that I used the &lt;skip:...&gt; directive instead of setting<br/>the global variable. The directive version is much safer.<br/><br/>Damian<br/> http://www.nntp.perl.org/group/perl.recdescent/2011/11/msg550.html Mon, 28 Nov 2011 08:10:31 +0000 Line by line parsing by Nikolay Shaplov <br/>Hi! I have a newbie question:<br/><br/>I&#39;d like to parse a file line by line... Line can be terminated by \n or by <br/>EOF<br/><br/>I do something like this:<br/><br/>===========================<br/>$Parse::RecDescent::skip = &#39;&#39;;<br/><br/>my $grammar = q{<br/> Page: Line(s) {print &quot;Finished! \n&quot;}<br/> Line: /^.*/ /\n|\Z/ {print &quot;Line: &#39;$item[1]&#39;\n&quot;}<br/>};<br/><br/>my $parser = new Parse::RecDescent($grammar);<br/><br/>my $text = &quot;aaaaa\nbbbbbb\nccccc&quot;;<br/><br/>if ($parser-&gt;Page($text))<br/>{<br/> print &quot;Happy!\n&quot;<br/>} else<br/>{<br/> print &quot;Unhapy :-(\n&quot;<br/>}<br/>===========================<br/><br/>but I get an empty line at the end of the output:<br/><br/>==================<br/>Line: &#39;aaaaa&#39;<br/>Line: &#39;bbbbbb&#39;<br/>Line: &#39;ccccc&#39;<br/>Line: &#39;&#39;<br/>Finished! <br/>Happy!<br/>===================<br/><br/>I can not understand why it is here... $::RD_TRACE = 1; does not give me any <br/>useful information....<br/><br/>Can you help me by<br/><br/>1. explaining why does it happens<br/><br/>2. telling what is the most right way to do such line by line parsing? (In <br/>future it should parse something similar to MediaWiki markup). <br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2011/11/msg549.html Sat, 26 Nov 2011 02:53:13 +0000 Re: recursive error reporting by Mark Hollomon This message probably won&#39;t thread well. I wasn&#39;t a member of the<br/>mailing list when Robert&#39;s original was sent. Sorry.<br/><br/>Robert:<br/><br/>Error messages in parsers are about as much art as science. Figuring<br/>out a good interface to allow PRD users to generate good error<br/>messages borders on black magic.<br/><br/>&gt; the unmodified input parses nicely, and if I uncomment any of the two<br/>&gt; syntax errors, it correctly rejects the input. excellent. but the error<br/>&gt; reporting is slightly less than ideal: the error case 1 will set off the<br/>&gt; &lt;error&gt; directive of the &#39;fact&#39; rule (good), but *also* the &lt;error&gt;<br/>&gt; directive of the &#39;code&#39; rule, which is a bit odd.<br/><br/><br/>Believe it or not, the double error messages is considered a feature.<br/>PRD keeps a stack of error messages that it accumulates as it winds<br/>its way back up the call stack used for parsing. After all, it is<br/>possible that some rule &quot;above&quot; fact (meaning that it called &quot;fact&quot; or<br/>call a rule that called &quot;fact&quot; etc), is okay with the idea that &quot;fact&quot;<br/>failed and has something else to try.<br/><br/>&lt;error?&gt; (and friends) are not &quot;die&quot;. They do not force the parser to<br/>stop dead in its track. All they do is say to give up on the current<br/>rule - and record that fact - either through an autogenerated message<br/>or using a message the grammar writer supplies.<br/><br/>If you truly want to stop dead, one option is to actually die:<br/><br/>fact : &lt;rulevar: $sawfact&gt;<br/> | &#39;fact&#39; {$sawfact = 1} &lt;commit&gt; identifier &#39;;&#39;<br/> | &lt;uncommit&gt; { die &quot;Something is rotten in state of Denmark at<br/>line $thisline\n&quot; if $sawfact }<br/><br/>Of course, the surrounding script better be ready for the exception...<br/><br/>I hope this was helpful.<br/><br/>Mark.<br/><br/>If you are bound to<br/> http://www.nntp.perl.org/group/perl.recdescent/2010/11/msg548.html Mon, 22 Nov 2010 16:04:50 +0000 Profiling a RecDescent generated parser. by Mark Hollomon Way back in 2006, a bug was posted (RT 21765) that basically complained that<br/>RecDescent parsers displayed exponential behavior in the length of the input<br/>text.<br/><br/>I recently posted a patch allowing a workaround to actually work. But I was<br/>curious as to what was causing the bad run times with large input.<br/><br/>I used a grammar inspired by the bug report...<br/><br/>---START test_grammar.prd--<br/>&lt;skip: qr{[ \t]*} &gt;<br/>FILE: line(s) /\z/<br/>line: /[a-z]+/ &#39;=&#39; /[0-9]+/ /\n/<br/>---END---<br/><br/>Yes, that is a &quot;global&quot; skip directive. Yes, I have a patch for it.<br/><br/>To keep the generation process out of the profiling stats, I precompiled the<br/>grammar into a stand-alone module. I generated 10,000 lines (~135K) of test<br/>data and fired up Devel::NYTProf<br/><br/>perl -d:NYTProf precomp_test_run.pl test_data<br/><br/>If you have never used NYTProf before, I would highly recommend it. It can<br/>produce stats down to the opcode level. And it produces some very lovely<br/>html pages with the line-by-line stats actually attached to the code.<br/><br/>The test case ran in 13.2 seconds on my old, slow machine.<br/><br/>The stats quickly revealed that the highest hotspot (by a large margin) was<br/>Expectation::at(). The Expectation object is where the parser stores the<br/>information necessary to print error message of the form:<br/><br/>&quot;Expecting &#39;foobar&#39; but found &#39;xyz fred&#39; instead&quot;<br/><br/>Expectation::at() allows the parser to set the context - the &#39;xyz fred&#39;<br/>part. It does this by passing the entire input string - as it is at that<br/>moment - to Expectation::at(). The subroutine then makes a copy of the<br/>entire string. It was this copying that was eating so much time. This is a<br/>bit wasteful to say the least. I modified Expectation::at() to only copy the<br/>first 100 bytes of the passed text.<br/><br/>This dropped the running time down to 7.8 seconds or 60% of the original.<br/>Not bad, but maybe we can do better.<br/><br/>The next hotspot was the several places that looked like:<br/>$text =~ s/\A($skip)/$lastsep=$1 and &quot;&quot;/e<br/><br/>These are removing the &quot;whitespace&quot; (however you have defined that) from the<br/>input. The /e modifier is very expensive as is the use of a capture group. I<br/>could not find a place in the code that $lastsep was actually being used for<br/>anything. So, I simplified this to<br/>$text =~ s/\A$skip//<br/><br/>But, there is a problem. If @itempos is being used, then the capture group<br/>is used to calculate the start of the next item. So, I modified the code<br/>generation to make the capture group depend on the generation of the<br/>@itempos code. Now, my test case could be fast, but if I needed @itempos in<br/>a future grammar, it would be correct - or at least no wronger than before.<br/><br/>This dropped the running tine down to 3.8 seconds or about 30% of the<br/>original. Not bad. Throughput has been increased by a factor of 3.<br/><br/>Feeling smug, and seeing no more easy pickings, I generated 50,000 (~720k)<br/>lines of input and let &#39;er rip.<br/><br/>75.4 seconds. Drats. Still exponential.<br/><br/>Firing up NYTProf again, the next culprit was _parserepeat(). In particular<br/>the line that saves off a copy of the input text in case of failure.<br/>my $_savetext = $text;<br/><br/>But that doesn&#39;t seem necessary. _parserepeat() is only called in order to<br/>call a rule. And the rule subroutines should already be taking all the<br/>necessary precautions to restore the text. So away the $_savetext lines go<br/>from _parserepeat().<br/><br/>That brings the 50K case down to 50.4 seconds or about 67% of the original<br/>run.<br/><br/>But now I&#39;m stuck. Of the 50 seconds, 6 is spent checking if the input<br/>matches, 27 seconds is spent on $text manipulations (saving a local copy,<br/>updating the caller&#39;s copy to match changes the rules have made), and 14.6<br/>(!) is spent entirely on the return statement.<br/><br/>I think to truly get rid of the exponential behavior, PRD is going to have<br/>to stop modifying the input text and instead use pos() and \G to check for<br/>matches. and &quot;rewind&quot; failures. But I&#39;m not sure how that would work in the<br/>face of the desire to allow the grammar writer modify the text inside the<br/>grammar. I&#39;ve been toying with a model that makes $text a tied scalar so<br/>that the parser can be notified when an action makes a change to it, but I&#39;m<br/>not convinced yet.<br/><br/>Any ideas? I&#39;d love to see some discussion started...<br/><br/>Note: The patch can be found at http://mark.hollomon.us/PRD -- This is a<br/>cumulative patch that contains fixes for several problems I&#39;ve worked on in<br/>the past few weeks.<br/><br/>Mark.<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2010/11/msg547.html Mon, 22 Nov 2010 11:44:03 +0000 recursive error reporting by Robert Lemmen hi folks,<br/><br/>I am playing around with PRD, and really like it so far. But I can quite<br/>get my head around some details of the error reporting. consider the<br/>following grammar:<br/><br/> code : fact(s?) eofile<br/> { $item[1] }<br/> | &lt;error&gt;<br/><br/> eofile : /^\Z/<br/><br/> fact : &#39;fact&#39; &lt;commit&gt; identifier &#39;;&#39; <br/> { [$item[0], $item[3]] }<br/> | &lt;error?&gt;&lt;reject&gt;<br/><br/> identifier : m{[A-Za-z_][A-Za-z0-9_]*}<br/><br/>and an input like this:<br/><br/> fact TFactA;<br/> # case 1<br/> # fact TFactB 234;<br/> #<br/> # case 2<br/> # blablabla<br/><br/>the unmodified input parses nicely, and if I uncomment any of the two<br/>syntax errors, it correctly rejects the input. excellent. but the error<br/>reporting is slightly less than ideal: the error case 1 will set off the<br/>&lt;error&gt; directive of the &#39;fact&#39; rule (good), but *also* the &lt;error&gt;<br/>directive of the &#39;code&#39; rule, which is a bit odd. If I remove the error<br/>directive of the parent rule, i&#39;ll miss errors of type 2, and if remove<br/>the error directive of &#39;fact&#39;, then the error is reported in a very hard<br/>to decipher way. Ideally i would like to have an error directive of most<br/>rules in my syntax, but simply stop processing after I hit any of them.<br/>Is there a way to achieve that?<br/><br/>I have read the FAQ and some other pages which talk about similar<br/>problems, but please note that in this case the parser correctly rejects<br/>the input, it just emits too many error messages<br/><br/>thanks robert<br/>-- <br/>Robert Lemmen http://www.semistable.com <br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2010/11/msg546.html Mon, 08 Nov 2010 16:35:10 +0000 Re: P::RD for tab-completion by Ted Zlatanov Thanks for the help. I used it for a tab-completing CLI I developed to<br/>talk to the Cassandra database; see Net::Cassandra::Easy 0.07 or later<br/>on CPAN (cassidy.pl is the CLI).<br/><br/>I&#39;m not happy with the verbosity of the resulting grammar but it works<br/>well. Maybe P::RD could have better built-in completion support,<br/>similar to the way &lt;autotree&gt; works: something you can access when a<br/>rule fails that tells you how far it got and what was successfully<br/>parsed. Basically the $expecting variable you suggested but set<br/>automatically.<br/><br/>Ted<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2010/03/msg545.html Wed, 31 Mar 2010 09:29:40 +0000 Re: P::RD for tab-completion by Damian Conway Hi Ted,<br/><br/>If I were building a completion checker, I&#39;d probably do something like the<br/>following.<br/><br/>Hope this helps,<br/><br/>Damian<br/><br/>-----cut----------cut----------cut----------cut----------cut-----<br/><br/> use Parse::RecDescent;<br/><br/> my @trial_inputs = (<br/> &#39;&#39;,<br/> &#39;m&#39;,<br/> &#39;mv&#39;,<br/> &#39;mv &#39;,<br/> &#39;mv f&#39;,<br/> &#39;mv file&#39;,<br/> &#39;mv file &#39;,<br/> &#39;mv file t&#39;,<br/> &#39;mv file to&#39;,<br/> &#39;mv file to &#39;,<br/> &#39;mv file to f&#39;,<br/> &#39;mv file to file&#39;,<br/> &#39;mv file to file &#39;,<br/> );<br/><br/> my $grammar = q{<br/> partial_cmd: &lt;rulevar: local $expecting = &#39;&#39;&gt;<br/> | cmd { &#39;nothing (cmd is complete)&#39; }<br/> | { $expecting }<br/><br/> cmd: &lt;skip: &#39;&#39;&gt;<br/> { $expecting = &#39;cmd_name&#39; } cmd_name<br/> { $expecting = &#39;file1&#39; } ws file ws<br/> { $expecting = &#39;to&#39; } &#39;to&#39;<br/> { $expecting = &#39;file2&#39; } ws file ws<br/><br/> cmd_name: &#39;mv&#39; | &#39;cp&#39; | &#39;ln&#39;<br/><br/> file: /\S+/<br/><br/> ws: /\s+/<br/> };<br/><br/> my $parser = Parse::RecDescent-&gt;new($grammar);<br/><br/> for my $input (@trial_inputs) {<br/> print &quot;&#39;$input&#39; : complete on &quot;, $parser-&gt;partial_cmd($input), &quot;\n&quot;;<br/> }<br/><br/>-----END----------END----------END----------END----------END-----<br/> http://www.nntp.perl.org/group/perl.recdescent/2010/03/msg544.html Wed, 31 Mar 2010 03:14:25 +0000 Re: P::RD for tab-completion by Ted Zlatanov On Tue, 30 Mar 2010 13:44:46 -0500 Ted Zlatanov &lt;tzz@lifelogs.com&gt; wrote: <br/><br/>TZ&gt; I&#39;ve got a working grammar that will parse, say<br/>TZ&gt; A a1 a2 a3<br/>TZ&gt; B b1 b2<br/><br/>TZ&gt; into structures. A and B don&#39;t overlap so I know that any sequence<br/>TZ&gt; beginning with A must have a1, a2, and a3.<br/><br/>TZ&gt; Now I&#39;m interested in finding out how much of the A rule can be matched,<br/>TZ&gt; for tab-completion (so I can tell if a1, a2, or a3 should be<br/>TZ&gt; completed). I&#39;m using Term::ReadLine::Gnu but that&#39;s not too<br/>TZ&gt; important. Basically I want, given &quot;A a1&quot;, to say &quot;oh you want all the<br/>TZ&gt; possible values for a2 and a1 is already given.&quot;<br/><br/>TZ&gt; I&#39;m currently doing this by making a1..3 optional and then assembling<br/>TZ&gt; them back in order, but was wondering if there&#39;s a better way to fail<br/>TZ&gt; the match but tell me how far the parser got before it failed.<br/><br/>Here&#39;s an example of a rule:<br/><br/>get: &#39;get&#39; family(?) keys(?) getparams(?)<br/>{ $return = [ [ family =&gt; $item[2], keys =&gt; $item[3], getparams =&gt; $item[4] ],<br/> \&amp;::internalPRD_get, \&amp;::dump_hash, $item[2], $item[3], $item[4] ]; }<br/><br/>(I could have used IxHash for the first parameter instead of an array)<br/><br/>So then my code looks at the first item returned, that&#39;s my structure.<br/>It figures out that e.g. &quot;family&quot; is filled but &quot;keys&quot; is not and does<br/>completion on the keys parameter. There&#39;s a little more logic to<br/>distinguish between a partially-filled key vs. an empty one but that&#39;s<br/>about it.<br/><br/>Ted<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2010/03/msg543.html Tue, 30 Mar 2010 13:46:44 +0000 P::RD for tab-completion by Ted Zlatanov I&#39;ve got a working grammar that will parse, say<br/><br/>A a1 a2 a3<br/>B b1 b2<br/><br/>into structures. A and B don&#39;t overlap so I know that any sequence<br/>beginning with A must have a1, a2, and a3.<br/><br/>Now I&#39;m interested in finding out how much of the A rule can be matched,<br/>for tab-completion (so I can tell if a1, a2, or a3 should be<br/>completed). I&#39;m using Term::ReadLine::Gnu but that&#39;s not too<br/>important. Basically I want, given &quot;A a1&quot;, to say &quot;oh you want all the<br/>possible values for a2 and a1 is already given.&quot;<br/><br/>I&#39;m currently doing this by making a1..3 optional and then assembling<br/>them back in order, but was wondering if there&#39;s a better way to fail<br/>the match but tell me how far the parser got before it failed.<br/><br/>Thanks<br/>Ted<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2010/03/msg542.html Tue, 30 Mar 2010 12:00:27 +0000 Bravo, vous ne vous êtes pas trompés :) by orertapexdest Je demande pardon qu&#39;est intervenu... Je comprends cette question. Nous<br/>examinerons. &lt;a href=http://www.ci2s.org&gt;achat cialis france&lt;/a&gt; Accepte<br/>un mauvais chiffre d&#39;affaires. &lt;a href=&quot;http://www.ci2s.org&quot;&gt;cialis&lt;/a&gt;<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2009/12/msg541.html Tue, 15 Dec 2009 05:47:25 +0000 Re: General question to RecDescent pattern matching by Dominique Dumont ravi.coote@fkie.fraunhofer.de (&quot;Coote, Ravi&quot;) writes:<br/><br/>&gt; I don&#39;t understand, why String2 h1(h2,h34) is beeing parsed correctly. I<br/>&gt; didn&#39;t specify a rule like <br/>&gt; myterm : /h\d+/ | /h\d+/ &quot;(&quot; myterm &quot;)&quot; | /h\d+/ &quot;(&quot; myterm &quot;,&quot; myterm<br/>&gt; &quot;)&quot; .<br/>&gt;<br/>&gt; Actually it is possibly to put in every string after h1(h2,h34) like<br/>&gt; h1(h2,h34)aaaaaaaaaaaa, which is parsed correctly. It gives Valid 2,<br/>&gt; too. That shouldnt be, does it ?<br/>&gt;<br/>&gt; Thank you for any hints! Probably i missed something !?<br/><br/>In fact, both your cases match /h\d+/. In the second case, (h2,h34) is<br/>not parsed.<br/><br/>For more information, see<br/><br/>http://search.cpan.org/~tbone/Parse-RecDescent-FAQ-6.0.i/FAQ.pm#Insuring_a_top-level_rule_match<br/><br/>All the best<br/><br/>-- <br/>Dominique Dumont <br/>&quot;Delivering successful solutions requires giving people what they<br/>need, not what they want.&quot; Kurt Bittner<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/10/msg540.html Tue, 13 Oct 2009 06:42:48 +0000 C Code Parser Using Recursive Descent by Rahul Jain #! /usr/bin/perl -w <br/># stat-comments.pl by Teodor Zlatanov, tzz@iglou.com <br/># March 26, 2000 <br/> <br/># A script to evaluate the readability of comments <br/># embedded in C++. Utilizes code from demo-decomment.pl, <br/># which is included with the Parse::RecDescent module. <br/># Uses the Lingua::EN::Fathom module to evaluate text <br/># readability. <br/> <br/># ORIGINAL BY Helmut Jarausch <br/># EXTENDED BY Damian Conway AND Helmut Jarausch <br/># POLISHED BY Teodor Zlatanov <br/> <br/> <br/>use strict; <br/>use Parse::RecDescent; <br/>use Lingua::EN::Fathom; <br/> <br/>use vars qw/ $Grammar /; <br/> <br/>my $parser = new Parse::RecDescent $Grammar or die &quot;invalid grammar&quot;; <br/> <br/>undef $/; <br/>my $text = @ARGV ? &lt;&gt; : &lt;DATA&gt;; <br/> <br/>my $parts = $parser-&gt;program($text) or die &quot;malformed C program&quot;; <br/> <br/># only work with comments of length &gt; 0 <br/>die &quot;No comments found in input&quot; unless length $parts-&gt;{comments}; <br/> <br/># convert every comment mark to a period, so separate comments are <br/># separate sentences, if well-formed. Lingua::EN::Fathom is quite <br/># good at figuring out what sentences are valid, so an extra period <br/># in the text won&#39;t affect the overall counts. <br/> <br/>$parts-&gt;{comments} =~ s#//#. #g; <br/>$parts-&gt;{comments} =~ s#/\*#. #g; <br/>$parts-&gt;{comments} =~ s#\*/#. #g; <br/> <br/># we can now evaluate the comments (stored in $parts-&gt;{comments}) <br/>my $fathom = new Lingua::EN::Fathom; <br/>$fathom-&gt;analyse_block($parts-&gt;{comments}); <br/> <br/># voila, the readability report! <br/>print($fathom-&gt;report); <br/> <br/>BEGIN <br/>{ $Grammar=&lt;&lt;&#39;EOF&#39;; <br/> <br/>program : &lt;rulevar: local $WithinComment=0&gt; <br/>program : &lt;rulevar: local $Comments = &quot;&quot;&gt; /this shouldn&#39;t be here :-/ <br/>program : &lt;reject&gt; <br/>program : &lt;reject&gt; /with prejudice/ <br/>program : &lt;rulevar: local $Code = &quot;&quot;&gt; <br/>program : &lt;rulevar: local @Strings&gt; <br/> <br/>program : &lt;skip:&#39;&#39;&gt; part(s) <br/> { { code=&gt;$Code, comments=&gt;$Comments, strings=&gt;[@Strings]} } <br/> <br/>part : comment <br/> | C_code <br/> | string <br/> <br/>C_code : m{( <br/> [^&quot;/]+ # one or more non-delimiters <br/> ( # then (optionally)... <br/> / # a potential comment delimiter <br/> [^*/] # which is not an actual delimiter <br/> )? # <br/> )+ # all repeated once or more <br/> }x <br/> { $Code .= $item[1] } <br/> <br/>string : m{&quot; # a leading delimiter <br/> (( # zero or more... <br/> \\. # escaped anything <br/> | # or <br/> [^&quot;] # anything but a delimiter <br/> )* <br/> ) <br/> &quot;}x <br/> { $Code .= $item[1]; push @Strings, $1 } <br/> <br/> <br/>comment : m{\s* # optional whitespace <br/> // # comment delimiter <br/> [^\n]* # anything except a newline <br/> \n # then a newline <br/> }x <br/> { $Code .= &quot;\n&quot;; $Comments .= $item[1] } <br/> <br/> | m{\s* # optional whitespace <br/> /\* # comment opener <br/> (?:[^*]+|\*(?!/))* # anything except */ <br/> \*/ # comment closer <br/> ([ \t]*)? # trailing blanks or tabs <br/> }x <br/> { $Code .= &quot; &quot;; $Comments .= $item[1] } <br/> <br/>EOF <br/>} <br/>__DATA__ <br/>program test; // for decomment <br/> <br/>// using Parse::RecDescent <br/> <br/>/* <br/> We should raise the indices quite a bit with this text section, <br/> because it will actually include sentences and structure. See, <br/> the problem with most C/C++ programs is that they use comments <br/> that are very short and convey little information. <br/>*/ <br/> <br/>int main() <br/>{ <br/>/* this should <br/> be removed <br/>*/ <br/> char *cp1 = &quot;&quot;; <br/> char *cp2 = &quot;cp2&quot;; <br/> int i; // a counter <br/> // remove this line altogehter <br/> int k; <br/> int more_indented; // keep indentation <br/> int l; /* a loop <br/> variable */ <br/> // should be completely removed <br/> <br/> char *str = &quot;/* ceci n&#39;est pas un commentaire */&quot;; <br/> return 0; <br/>} <br/> http://www.nntp.perl.org/group/perl.recdescent/2009/10/msg539.html Fri, 09 Oct 2009 05:12:35 +0000 General question to RecDescent pattern matching by Coote, Ravi Hi all,<br/><br/>I&#39;ve got a question to the following perl script<br/><br/>------------------<br/> #!/usr/bin/perl<br/><br/> use Parse::RecDescent;<br/><br/> # Create and compile the source file<br/> $parser = Parse::RecDescent-&gt;new(q(<br/> startrule : myterm<br/> myterm : /h\d+/ | /h\d+/ &quot;(&quot; myterm &quot;)&quot;<br/> ));<br/><br/> # Test it on sample data<br/> print &quot;Valid 1\n&quot; if $parser-&gt;startrule(&quot;h1&quot;);<br/> print &quot;Valid 2\n&quot; if $parser-&gt;startrule(&quot;h1(h2,h34)&quot;);<br/>------------------<br/><br/>Running it gives:<br/>Valid 1<br/>Valid 2<br/><br/>------------------<br/><br/>I don&#39;t understand, why String2 h1(h2,h34) is beeing parsed correctly. I<br/>didn&#39;t specify a rule like <br/> myterm : /h\d+/ | /h\d+/ &quot;(&quot; myterm &quot;)&quot; | /h\d+/ &quot;(&quot; myterm &quot;,&quot; myterm<br/>&quot;)&quot; .<br/><br/>Actually it is possibly to put in every string after h1(h2,h34) like<br/>h1(h2,h34)aaaaaaaaaaaa, which is parsed correctly. It gives Valid 2,<br/>too. That shouldnt be, does it ?<br/><br/>Thank you for any hints! Probably i missed something !?<br/><br/>Regards,<br/><br/>Ravi Coote<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/10/msg538.html Fri, 09 Oct 2009 03:21:45 +0000 Re: Deferred interpretation? by Damian Conway Mike Diehl reported back:<br/><br/>&gt; I did finally, rewrite the whole thing using the second approach. &nbsp;This was<br/>&gt; CONSIDERABLY more complex, as I had to navigate a fairly complex parse tree.<br/>&gt; I think I&#39;ve done something wrong, as I&#39;m still finding bugs... &nbsp;I&#39;ll do some<br/>&gt; more reading, though.<br/><br/>One way to make the job easier is to have P::RD bless each node in<br/>your parse tree<br/>(look up &quot;Autotrees&quot; in the module documentation or take a look at<br/>demo_LaTeXish.pl<br/>and demo_eval.pl that come with the module). Then you create methods<br/>in each of the<br/>node classes, and let them work out the tree traversal themselves.<br/><br/><br/>&gt; Anyway, this is a nice final design, though. &nbsp;Because I now have a parse tree,<br/>&gt; I have the potential of serializing that data structure to an external file<br/>&gt; and saving the expense of launching the parser each time my program runs.<br/>&gt; This amounts to creating a JIT compiler! &nbsp;Should be MUCH more efficient,<br/>&gt; right?<br/><br/>Yes, it should be.<br/><br/><br/>&gt; Any recommendations between the various modules for this purpose?<br/>&gt; Data::Dumper, Storable, Serialize?<br/><br/>I tend to use Data::Dumper myself.<br/><br/><br/>&gt; BTW Damian, RD is a nice piece of work. &nbsp;It&#39;s almost FUN to use.<br/><br/>Glad you&#39;re finding it useful.<br/><br/>Damian<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg537.html Thu, 10 Sep 2009 08:29:30 +0000 Re: Deferred interpretation? by Mike Diehl On Monday 07 September 2009 16:52:31 Damian Conway wrote:<br/>&gt; Mike Diehl pondered:<br/>&gt; &gt; Well, I&#39;ve continued to think about this and I&#39;ve got some more<br/>&gt; &gt; questions.<br/>&gt; &gt;<br/>&gt; &gt; I did read up on the &lt;defer: directive. &nbsp;I don&#39;t think that will help me.<br/>&gt; &gt; &nbsp;If I&#39;m missing something, please let me know.<br/>&gt;<br/>&gt; No, it won&#39;t help. The problem is that you want to *parse* every command,<br/>&gt; but not *execute* every command (only the ones in the correct branches of<br/>&gt; the if).<br/>&gt;<br/>&gt; &gt; So, I&#39;ve come up with two different ways to handle this situation:<br/>&gt; &gt;<br/>&gt; &gt; 1. &nbsp;Pass in a boolean areguement to each production, and if that<br/>&gt; &gt; arguement is &quot;true&quot; process the action, otherwise, simply return the TEXT<br/>&gt; &gt; of the matched expression.<br/>&gt; &gt;<br/>&gt; &gt; This way, my if statement passes [1] and [0] to the two clauses. &nbsp;This<br/>&gt; &gt; introduces substantial logic into my grammar, though.<br/>&gt; &gt;<br/>&gt; &gt; 2. &nbsp;The other way is to build the &quot;parse tree&quot; inside the grammar and<br/>&gt; &gt; then &quot;walk&quot; the tree. &nbsp;This would entail almost completely rewriting my<br/>&gt; &gt; grammar actions. &nbsp;But this way would also, potentially?, allow me to<br/>&gt; &gt; compile my language and forgo the parser step alltogether.<br/>&gt; &gt;<br/>&gt; &gt; Which method would you recommend?<br/>&gt;<br/>&gt; Definitely, the second approach. There&#39;s a good reason that people<br/>&gt; usually separate compilation and execution: namely that mixing them is<br/>&gt; both vastly more complex and considerably more error-prone.<br/>&gt;<br/>&gt; Damian<br/><br/>I did finally, rewrite the whole thing using the second approach. This was <br/>CONSIDERABLY more complex, as I had to navigate a fairly complex parse tree. <br/>I think I&#39;ve done something wrong, as I&#39;m still finding bugs... I&#39;ll do some <br/>more reading, though.<br/><br/>Anyway, this is a nice final design, though. Because I now have a parse tree, <br/>I have the potential of serializing that data structure to an external file <br/>and saving the expense of launching the parser each time my program runs. <br/>This amounts to creating a JIT compiler! Should be MUCH more efficient, <br/>right?<br/><br/>Any recommendations between the various modules for this purpose? <br/>Data::Dumper, Storable, Serialize?<br/><br/>BTW Damian, RD is a nice piece of work. It&#39;s almost FUN to use.<br/><br/>-- <br/><br/>Take care and have fun,<br/>Mike Diehl.<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg536.html Wed, 09 Sep 2009 07:52:30 +0000 Re: Deferred interpretation? by Damian Conway Mike Diehl pondered:<br/><br/>&gt; Well, I&#39;ve continued to think about this and I&#39;ve got some more questions.<br/>&gt;<br/>&gt; I did read up on the &lt;defer: directive. &nbsp;I don&#39;t think that will help me. &nbsp;If<br/>&gt; I&#39;m missing something, please let me know.<br/><br/>No, it won&#39;t help. The problem is that you want to *parse* every command, but<br/>not *execute* every command (only the ones in the correct branches of the if).<br/><br/><br/>&gt; So, I&#39;ve come up with two different ways to handle this situation:<br/>&gt;<br/>&gt; 1. &nbsp;Pass in a boolean areguement to each production, and if that arguement<br/>&gt; is &quot;true&quot; process the action, otherwise, simply return the TEXT of the<br/>&gt; matched expression.<br/>&gt;<br/>&gt; This way, my if statement passes [1] and [0] to the two clauses. &nbsp;This<br/>&gt; introduces substantial logic into my grammar, though.<br/>&gt;<br/>&gt; 2. &nbsp;The other way is to build the &quot;parse tree&quot; inside the grammar and<br/>&gt; then &quot;walk&quot; the tree. &nbsp;This would entail almost completely rewriting my<br/>&gt; grammar actions. &nbsp;But this way would also, potentially?, allow me to compile<br/>&gt; my language and forgo the parser step alltogether.<br/>&gt;<br/>&gt; Which method would you recommend?<br/><br/>Definitely, the second approach. There&#39;s a good reason that people<br/>usually separate compilation and execution: namely that mixing them is<br/>both vastly more complex and considerably more error-prone.<br/><br/>Damian<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg535.html Tue, 08 Sep 2009 06:27:12 +0000 Re: Help with a grammar problem by Matthew Braid Sorry, replying to myself, but I just stumbled across a similar<br/>situation and my solution might help you too.<br/><br/>I needed to define a block like this:<br/><br/>perl until FLAG<br/> PERL<br/>FLAG;<br/><br/>which is like a &#39;here-doc&#39; for inlining perl in another language that<br/>doesn&#39;t require actually parsing the perl code. Like your input, I<br/>need to match &#39;anything&#39; up to the closing flag. I ended up using a<br/>rule similar to your original solution, except instead of having a<br/>/.*?/ match, I combined that with the next terminal. After playing<br/>around a bit, I came up with the following test script that parses out<br/>all valid chunks between &#39;START&#39; and &#39;END&#39; amongst other rubbish in<br/>the input in one pass:<br/><br/>====== START CODE ======<br/><br/>use Parse::RecDescent;<br/>use Data::Dumper;<br/>#$::RD_TRACE = 1;<br/><br/># assuming start/end delimiters of START and END<br/>my $grammar = &lt;&lt;&#39;STOP&#39;;<br/><br/>start:<br/> chunk(s?)<br/><br/>chunk:<br/> /.*?START/s command(s) &#39;END&#39; # This is the important bit<br/> {$item[2]}<br/><br/>command:<br/> &#39;test&#39; &#39;;&#39;<br/> {&quot;TEST COMMAND&quot;}<br/><br/>STOP<br/><br/>my $text = &lt;&lt; &#39;STOP&#39;;<br/><br/>blah blah blayh<br/><br/>asdsd kjkl<br/><br/>START<br/> test;<br/> test;<br/>END<br/><br/>kjsaljdlk<br/>askd<br/><br/>START<br/> test;<br/>END<br/><br/>sad<br/>asdgfdsf<br/>gfsfg<br/><br/>STOP<br/><br/>my $res = Parse::RecDescent-&gt;new($grammar)-&gt;start($text);<br/>print Data::Dumper::Dumper($res), &quot;\n&quot;;<br/><br/>====== END CODE ======<br/><br/>Note that the /s modifier on the &#39;garbage scooping&#39; re&#39;s is important<br/>for this to work. Was scratching my head over that for a bit :)<br/><br/>The output of that is:<br/><br/>====== START OUTPUT ======<br/><br/>$VAR1 = [<br/> [<br/> &#39;TEST COMMAND&#39;,<br/> &#39;TEST COMMAND&#39;<br/> ],<br/> [<br/> &#39;TEST COMMAND&#39;<br/> ]<br/> ];<br/><br/>====== END OUTPUT ======<br/><br/>I haven&#39;t done any benchmarking, but that might be faster than<br/>sequential parses of &#39;clean&#39; data. My original solution anchored to<br/>the end of the input with an eof marker and a &#39;trailing_guff&#39; rule<br/>that matched anything after the chunk(s?) subrule, but that is<br/>unnecessary.<br/><br/>MB<br/><br/>2009/9/4 Matthew Braid &lt;mattybear@gmail.com&gt;:<br/>&gt; Hi all,<br/>&gt;<br/>&gt; Would there be some way of manipulating the skip re to do this?<br/>&gt;<br/>&gt; Something along the lines of:<br/>&gt;<br/>&gt; top: &lt;skip: /NOT START DELIMETER/&gt; chunk(s) eof<br/>&gt; chunk: delimeter_start &lt;skip: /NORMAL SKIP/&gt; command(s) delimiter_end<br/>&gt; eof: /\Z/<br/>&gt;<br/>&gt; The problem there is defining a skip that won&#39;t skip a<br/>&gt; delimeter_start. This probably won&#39;t allow delimeter_start to _not_<br/>&gt; mean the start of a set of commands as well.<br/>&gt;<br/>&gt; Not tested, but just a suggestion.<br/>&gt;<br/>&gt; MB<br/>&gt;<br/>&gt; 2009/9/4 Mike Diehl &lt;mdiehl@diehlnet.com&gt;:<br/>&gt;&gt; On Thursday 03 September 2009 01:50:58 Damian Conway wrote:<br/>&gt;&gt;&gt; Hi Mike,<br/>&gt;&gt;&gt;<br/>&gt;&gt;&gt; &gt; What I&#39;ve tried amounts to this:<br/>&gt;&gt;&gt; &gt;<br/>&gt;&gt;&gt; &gt; chunk: /.*?/ delimiter_start command(s) delimiter_end /.*?/<br/>&gt;&gt;&gt;<br/>&gt;&gt;&gt; Unfortunately that won&#39;t work, because every regex in a PRD grammar is<br/>&gt;&gt;&gt; independent of the rest of the grammar, so even a minimal-matching .*?<br/>&gt;&gt;&gt; eats everything.<br/>&gt;&gt;<br/>&gt;&gt; Ya, that&#39;s what I was suspecting. &nbsp;In hind sight, I should have figured that;<br/>&gt;&gt; that&#39;s how I&#39;d write it...<br/>&gt;&gt;<br/>&gt;&gt;&gt; Is there some reason you can&#39;t use something like:<br/>&gt;&gt;&gt;<br/>&gt;&gt;&gt; &nbsp; &nbsp; my $parser = Parse::RecDescent-&gt;new($grammar);<br/>&gt;&gt;&gt;<br/>&gt;&gt;&gt; &nbsp; &nbsp; $text =~ s{&lt;DELIMITER&gt; (.*?) &lt;/DELIMITER&gt;}<br/>&gt;&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { $parser-&gt;parse($1); q{} }gexs;<br/>&gt;&gt;<br/>&gt;&gt; That&#39;s what I was doing, but it seems I misinterpreted my profiling results.<br/>&gt;&gt; I found from profiling that the function I use to create (once) and run the<br/>&gt;&gt; parser accounted for 80% of runtime.<br/>&gt;&gt;<br/>&gt;&gt; I assumed that since I only create the parser once (if !defined), creating the<br/>&gt;&gt; parser wasn&#39;t where the cost was. &nbsp;So I decided that it must be due to<br/>&gt;&gt; actually running the parser, which might run several times during program<br/>&gt;&gt; execution. &nbsp;My conclusion was that I needed to rewrite the grammar so that<br/>&gt;&gt; the parser would only run once.<br/>&gt;&gt;<br/>&gt;&gt; It sounds like I may need to go back to the old algorithm and start tuning the<br/>&gt;&gt; grammar.<br/>&gt;&gt;<br/>&gt;&gt; --<br/>&gt;&gt;<br/>&gt;&gt; Take care and have fun,<br/>&gt;&gt; Mike Diehl.<br/>&gt;&gt;<br/>&gt;<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg534.html Sun, 06 Sep 2009 16:47:19 +0000 Re: Deferred interpretation? by Mike Diehl Well, I&#39;ve continued to think about this and I&#39;ve got some more questions.<br/><br/>I did read up on the &lt;defer: directive. I don&#39;t think that will help me. If <br/>I&#39;m missing something, please let me know.<br/><br/>So, I&#39;ve come up with two different ways to handle this situation:<br/><br/>1. Pass in a boolean areguement to each production, and if that arguement <br/>is &quot;true&quot; process the action, otherwise, simply return the TEXT of the <br/>matched expression.<br/><br/>This way, my if statement passes [1] and [0] to the two clauses. This <br/>introduces substantial logic into my grammar, though.<br/><br/>2. The other way is to build the &quot;parse tree&quot; inside the grammar and <br/>then &quot;walk&quot; the tree. This would entail almost completely rewriting my <br/>grammar actions. But this way would also, potentially?, allow me to compile <br/>my language and forgo the parser step alltogether.<br/><br/>Which method would you recommend?<br/><br/>TIA,<br/><br/>Mike.<br/><br/>On Thursday 03 September 2009 15:25:29 Mike Diehl wrote:<br/>&gt; Hi all,<br/>&gt;<br/>&gt; I&#39;ve got another problem and I&#39;m hoping someone can point me in the right<br/>&gt; direction.<br/>&gt;<br/>&gt; My grammar is for a &quot;language&quot; that includes an &quot;if&quot; type command. The<br/>&gt; &quot;if&quot; command takes an expression, and two other commands. Depending on the<br/>&gt; values of the expression, ONE of the commands is supposed to be executed. <br/>&gt; However, what I&#39;m seeing is that BOTH commands are being evaluated, but the<br/>&gt; results of only one of the commands is being used.<br/>&gt;<br/>&gt; Here is a snippet of the grammar:<br/>&gt;<br/>&gt; ===================================================================<br/>&gt; if: &quot;[#if(&quot; boolean_expression &quot;,&quot; command &quot;,&quot; command &quot;)]&quot;<br/>&gt; {<br/>&gt; if ($item[2] eq &quot;true&quot;) {<br/>&gt; $return = $item[4];<br/>&gt; } else {<br/>&gt; $return = $item[6];<br/>&gt; }<br/>&gt; }<br/>&gt;<br/>&gt; command: variable | include | word | quoted_string<br/>&gt; {<br/>&gt; $return = $item[1];<br/>&gt; }<br/>&gt;<br/>&gt; include: &quot;[#include(&quot; file_path &quot;)]&quot;<br/>&gt; {<br/>&gt; $return = main::parse_page($item[2]);<br/>&gt; }<br/>&gt; ...<br/>&gt; ===================================================================<br/>&gt;<br/>&gt; So, in the case where we have a true expression, both commands are being<br/>&gt; evaluated, but only the results of one of the commands is returned. The<br/>&gt; problem is that, as in the case of an &quot;include&quot; command, the commands might<br/>&gt; have side-affects.<br/>&gt;<br/>&gt; I&#39;m sure this is a common design pattern. Perhaps there is an &quot;easy&quot; way<br/>&gt; to deal with this?<br/><br/><br/><br/>-- <br/><br/>Take care and have fun,<br/>Mike Diehl.<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg533.html Sat, 05 Sep 2009 15:58:20 +0000 Re: Help with a grammar problem by Matthew Braid Hi all,<br/><br/>Would there be some way of manipulating the skip re to do this?<br/><br/>Something along the lines of:<br/><br/>top: &lt;skip: /NOT START DELIMETER/&gt; chunk(s) eof<br/>chunk: delimeter_start &lt;skip: /NORMAL SKIP/&gt; command(s) delimiter_end<br/>eof: /\Z/<br/><br/>The problem there is defining a skip that won&#39;t skip a<br/>delimeter_start. This probably won&#39;t allow delimeter_start to _not_<br/>mean the start of a set of commands as well.<br/><br/>Not tested, but just a suggestion.<br/><br/>MB<br/><br/>2009/9/4 Mike Diehl &lt;mdiehl@diehlnet.com&gt;:<br/>&gt; On Thursday 03 September 2009 01:50:58 Damian Conway wrote:<br/>&gt;&gt; Hi Mike,<br/>&gt;&gt;<br/>&gt;&gt; &gt; What I&#39;ve tried amounts to this:<br/>&gt;&gt; &gt;<br/>&gt;&gt; &gt; chunk: /.*?/ delimiter_start command(s) delimiter_end /.*?/<br/>&gt;&gt;<br/>&gt;&gt; Unfortunately that won&#39;t work, because every regex in a PRD grammar is<br/>&gt;&gt; independent of the rest of the grammar, so even a minimal-matching .*?<br/>&gt;&gt; eats everything.<br/>&gt;<br/>&gt; Ya, that&#39;s what I was suspecting. &nbsp;In hind sight, I should have figured that;<br/>&gt; that&#39;s how I&#39;d write it...<br/>&gt;<br/>&gt;&gt; Is there some reason you can&#39;t use something like:<br/>&gt;&gt;<br/>&gt;&gt; &nbsp; &nbsp; my $parser = Parse::RecDescent-&gt;new($grammar);<br/>&gt;&gt;<br/>&gt;&gt; &nbsp; &nbsp; $text =~ s{&lt;DELIMITER&gt; (.*?) &lt;/DELIMITER&gt;}<br/>&gt;&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { $parser-&gt;parse($1); q{} }gexs;<br/>&gt;<br/>&gt; That&#39;s what I was doing, but it seems I misinterpreted my profiling results.<br/>&gt; I found from profiling that the function I use to create (once) and run the<br/>&gt; parser accounted for 80% of runtime.<br/>&gt;<br/>&gt; I assumed that since I only create the parser once (if !defined), creating the<br/>&gt; parser wasn&#39;t where the cost was. &nbsp;So I decided that it must be due to<br/>&gt; actually running the parser, which might run several times during program<br/>&gt; execution. &nbsp;My conclusion was that I needed to rewrite the grammar so that<br/>&gt; the parser would only run once.<br/>&gt;<br/>&gt; It sounds like I may need to go back to the old algorithm and start tuning the<br/>&gt; grammar.<br/>&gt;<br/>&gt; --<br/>&gt;<br/>&gt; Take care and have fun,<br/>&gt; Mike Diehl.<br/>&gt;<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg532.html Thu, 03 Sep 2009 15:23:03 +0000 Deferred interpretation? by Mike Diehl Hi all,<br/><br/>I&#39;ve got another problem and I&#39;m hoping someone can point me in the right <br/>direction.<br/><br/>My grammar is for a &quot;language&quot; that includes an &quot;if&quot; type command. The &quot;if&quot; <br/>command takes an expression, and two other commands. Depending on the values <br/>of the expression, ONE of the commands is supposed to be executed. However, <br/>what I&#39;m seeing is that BOTH commands are being evaluated, but the results of <br/>only one of the commands is being used.<br/><br/>Here is a snippet of the grammar:<br/><br/>===================================================================<br/>if: &quot;[#if(&quot; boolean_expression &quot;,&quot; command &quot;,&quot; command &quot;)]&quot; <br/>{<br/> if ($item[2] eq &quot;true&quot;) {<br/> $return = $item[4];<br/> } else {<br/> $return = $item[6];<br/> }<br/>} <br/><br/>command: variable | include | word | quoted_string<br/> {<br/> $return = $item[1];<br/> }<br/><br/>include: &quot;[#include(&quot; file_path &quot;)]&quot;<br/> {<br/> $return = main::parse_page($item[2]);<br/> }<br/>...<br/>===================================================================<br/><br/>So, in the case where we have a true expression, both commands are being <br/>evaluated, but only the results of one of the commands is returned. The <br/>problem is that, as in the case of an &quot;include&quot; command, the commands might <br/>have side-affects.<br/><br/>I&#39;m sure this is a common design pattern. Perhaps there is an &quot;easy&quot; way to <br/>deal with this?<br/><br/><br/>-- <br/><br/>Take care and have fun,<br/>Mike Diehl.<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg531.html Thu, 03 Sep 2009 14:24:29 +0000 Re: Help with a grammar problem by Mike Diehl On Thursday 03 September 2009 01:50:58 Damian Conway wrote:<br/>&gt; Hi Mike,<br/>&gt;<br/>&gt; &gt; What I&#39;ve tried amounts to this:<br/>&gt; &gt;<br/>&gt; &gt; chunk: /.*?/ delimiter_start command(s) delimiter_end /.*?/<br/>&gt;<br/>&gt; Unfortunately that won&#39;t work, because every regex in a PRD grammar is<br/>&gt; independent of the rest of the grammar, so even a minimal-matching .*?<br/>&gt; eats everything.<br/><br/>Ya, that&#39;s what I was suspecting. In hind sight, I should have figured that; <br/>that&#39;s how I&#39;d write it...<br/><br/>&gt; Is there some reason you can&#39;t use something like:<br/>&gt;<br/>&gt; my $parser = Parse::RecDescent-&gt;new($grammar);<br/>&gt;<br/>&gt; $text =~ s{&lt;DELIMITER&gt; (.*?) &lt;/DELIMITER&gt;}<br/>&gt; { $parser-&gt;parse($1); q{} }gexs;<br/><br/>That&#39;s what I was doing, but it seems I misinterpreted my profiling results. <br/>I found from profiling that the function I use to create (once) and run the <br/>parser accounted for 80% of runtime. <br/><br/>I assumed that since I only create the parser once (if !defined), creating the <br/>parser wasn&#39;t where the cost was. So I decided that it must be due to <br/>actually running the parser, which might run several times during program <br/>execution. My conclusion was that I needed to rewrite the grammar so that <br/>the parser would only run once.<br/><br/>It sounds like I may need to go back to the old algorithm and start tuning the <br/>grammar.<br/><br/>-- <br/><br/>Take care and have fun,<br/>Mike Diehl.<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg530.html Thu, 03 Sep 2009 08:49:36 +0000 Re: Help with a grammar problem by Damian Conway Hi Mike,<br/><br/><br/>&gt; What I&#39;ve tried amounts to this:<br/>&gt;<br/>&gt; chunk: /.*?/ delimiter_start command(s) delimiter_end /.*?/<br/><br/>Unfortunately that won&#39;t work, because every regex in a PRD grammar is<br/>independent of the rest of the grammar, so even a minimal-matching .*?<br/>eats everything.<br/><br/>Is there some reason you can&#39;t use something like:<br/><br/> my $parser = Parse::RecDescent-&gt;new($grammar);<br/><br/> $text =~ s{&lt;DELIMITER&gt; (.*?) &lt;/DELIMITER&gt;}<br/> { $parser-&gt;parse($1); q{} }gexs;<br/><br/>???<br/><br/>Damian<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg529.html Thu, 03 Sep 2009 02:24:05 +0000 Re: Help with a grammar problem by Ted Zlatanov On Tue, 1 Sep 2009 20:33:22 -0600 Mike Diehl &lt;mdiehl@diehlnet.com&gt; wrote: <br/><br/>MD&gt; Hi all,<br/>MD&gt; I&#39;m struggling with an RD grammar problem and am hoping you can help.<br/><br/>MD&gt; I&#39;ve got some data that is embedded inside a file and I need to parse only the <br/>MD&gt; embedded data and leave the &quot;noise&quot; untouched.<br/><br/>MD&gt; For example:<br/><br/>MD&gt; afaf asf af &lt;DELIMITER&gt; command command command &lt;/DELIMITER&gt; asdf asd qer f a<br/><br/>MD&gt; I want to parse the command(s), remove the DELIMITERS and preserve everything <br/>MD&gt; else.<br/><br/>MD&gt; In the past, I&#39;ve looped over the file with a regex looking for the delimeters <br/>MD&gt; and then running RD on the text inside. However, the cost of launching <br/>MD&gt; several instances of the parser is very expensive, about 80% of runtime.<br/><br/>MD&gt; I&#39;d like to be able to use one parser and have it &quot;do&quot; the entire file.<br/><br/>MD&gt; What I&#39;ve tried amounts to this:<br/><br/>MD&gt; chunk: /.*?/ delimiter_start command(s) delimiter_end /.*?/<br/><br/>MD&gt; However, I think the first regex is eating too much.<br/><br/>MD&gt; Any suggestions on how to do this?<br/><br/>This seems reasonable. Can you show a full runnable example that fails?<br/><br/>Ted<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg528.html Wed, 02 Sep 2009 09:48:50 +0000 Help with a grammar problem by Mike Diehl Hi all,<br/><br/>I&#39;m struggling with an RD grammar problem and am hoping you can help.<br/><br/>I&#39;ve got some data that is embedded inside a file and I need to parse only the <br/>embedded data and leave the &quot;noise&quot; untouched.<br/><br/>For example:<br/><br/>afaf asf af &lt;DELIMITER&gt; command command command &lt;/DELIMITER&gt; asdf asd qer f a<br/><br/>I want to parse the command(s), remove the DELIMITERS and preserve everything <br/>else.<br/><br/>In the past, I&#39;ve looped over the file with a regex looking for the delimeters <br/>and then running RD on the text inside. However, the cost of launching <br/>several instances of the parser is very expensive, about 80% of runtime.<br/><br/>I&#39;d like to be able to use one parser and have it &quot;do&quot; the entire file.<br/><br/>What I&#39;ve tried amounts to this:<br/><br/>chunk: /.*?/ delimiter_start command(s) delimiter_end /.*?/<br/><br/>However, I think the first regex is eating too much.<br/><br/>Any suggestions on how to do this?<br/><br/>TIA.<br/><br/>-- <br/><br/>Take care and have fun,<br/>Mike Diehl.<br/> http://www.nntp.perl.org/group/perl.recdescent/2009/09/msg527.html Tue, 01 Sep 2009 19:32:41 +0000 How to know where I am going wrong in writing the grammar by luzer poor Hi,<br/>Having a lot of pain with the code [last reply on PM @<br/>http://www.perlmonks.org/index.pl?node_id=754947] below:<br/><br/>---code start<br/><br/>#!/usr/bin/perl -w<br/><br/>use strict;<br/>use warnings;<br/>#use diagnostics;<br/><br/>use Parse::RecDescent;<br/>use Data::Dumper;<br/><br/># Enable warnings within the Parse::RecDescent module.<br/><br/>$::RD_ERRORS = 1; # Make sure the parser dies when it encounters an error<br/>$::RD_WARN = 1; # Enable warnings. This will warn on unused rules &amp;c.<br/>$::RD_HINT = 1; # Give out hints to help fix problems.<br/>#$::RD_TRACE = 1; # Trace of parser<br/><br/>#$::AUTOSTUB = 1;<br/><br/>my $grammar = &lt;&lt;&#39;_EOGRAMMAR_&#39;;<br/> {<br/>use strict;<br/> use warnings;<br/> }<br/>#{ our $errortext = &#39;&#39;; our $errorprefix = &#39;&#39;;}<br/>RECORDSTART : /^(RECORD)[\r\n]+/<br/> {<br/> #print &quot;\n[*] RECORDSTART -&gt; &quot; . $item[1];<br/> $1;<br/>#$item[1];<br/>}<br/><br/>RECORDEND : /^(\.)[\r\n]*/<br/>#/\./<br/> {<br/> #print &quot;\n[*] RECORDEND -&gt; &quot; . $item[1] . &quot;\n&quot;;<br/> $1;<br/>#$item[1];<br/>}<br/><br/>fieldName : /[^ \t\n]+/<br/>{<br/>#print &quot;\n[*] fieldName -&gt; $item[1]\n&quot;;<br/> $item[1];<br/>}<br/><br/>metaName : /[^ \t\n]+\n?/<br/>{<br/>$item[1];<br/>}<br/><br/>metaFieldValue: /([^\n]*)\n/<br/>{<br/>$1;<br/>}<br/><br/>fieldValue: /([^\n]*)\n/<br/>{<br/>#print &quot;[*] fieldValue -&gt; $item[1] ($1)\n&quot;;<br/>$1;<br/>}<br/><br/>field : /^F/ fieldName fieldValue<br/>{<br/>#print &quot;[*] Got field named \&#39;&quot; . $item{ fieldName } . &#39;\&#39; with value \&#39;&#39; .<br/>$item{ fieldValue } . &quot;\&#39;\n&quot;;<br/>#print &quot;[*] Got metafield named \&#39;&quot; . $item[2] . &#39;\&#39; with value \&#39;&#39; .<br/>$item[3] . &quot;\&#39;\n&quot;;<br/>#print Data::Dumper-&gt;Dump([$text], [&quot;fieldStuff&quot;]);<br/>$return = { fieldName =&gt; $item[2], fieldValue =&gt; $item[3]};<br/>}<br/><br/>metaField : /^\#/ metaName metaFieldValue<br/>{<br/>#print &quot;[*] Got metafield named \&#39;&quot; . $item{ metaName } . &#39;\&#39; with value \&#39;&#39;<br/>. $item{ metaFieldValue } . &quot;\&#39;\n&quot;;<br/>#print &quot;[*] Got metafield named \&#39;&quot; . $item[2] . &#39;\&#39; with value \&#39;&#39; .<br/>$item[3] . &quot;\&#39;\n&quot;;<br/> $return = { metaName =&gt; $item[2], metaFieldValue =&gt; $item[3]};<br/>}<br/> recordBody : field(s)<br/>{<br/>print &quot;\n[*] field(s)\n&quot;;<br/> #print main::Dumper \@item;<br/>#print Data::Dumper-&gt;Dump([@item], [&quot;field(s)&quot;]);<br/><br/>$return = &#39;field(s)&#39;;<br/> #if((length($text) &gt; 3) &amp;&amp; (0 == @item))<br/>if(length($text) &gt; 2)<br/>{<br/>$return = undef;<br/>}<br/>}<br/> |<br/>metaField(s)<br/>{<br/>print &quot;\n[*] metaField(s)\n&quot;;<br/> #print main::Dumper \@item;<br/>#print Data::Dumper-&gt;Dump([@item], [&quot;metaField(s)&quot;]);<br/> $return = &#39;metaField(s)&#39;;<br/> #if((length($text) &gt; 3) &amp;&amp; (0 == @item))<br/>if(length($text) &gt; 2)<br/>{<br/>$return = undef;<br/>}<br/>}<br/>|<br/>&lt;error&gt;<br/>#&lt;error: I am confused in recordBody at $thisoffset!&gt;<br/><br/> #startOfRecord: RECORDSTART recordBody(s /$/) RECORDEND<br/> startOfRecord: RECORDSTART recordBody RECORDEND<br/> #startOfRecord: RECORDSTART ( metaField(s) field(s) ) RECORDEND<br/> #startOfRecord: RECORDSTART ( field(s) metaField(s) ) RECORDEND<br/> {<br/> #print main::Dumper \@item;<br/> $return = &#39;something&#39;;<br/> #$return = $item[1];<br/> 1;<br/>}<br/> |<br/> #&lt;error&gt;<br/>&lt;error: I could not even parse a line line starting at $thisoffset!&gt;<br/>_EOGRAMMAR_<br/><br/>#$skeletonPattern = &quot;#input_type[ \t]*&quot;;<br/>#my $metaFieldPattern = qr/[ \t]*#([^ \t]+)[ \t]+(.*)/o; # &quot;#input_type<br/>SCDR+&quot;, &quot;#filename processed_01_20080616001403.cdr&quot;, etc<br/>#my $normalFieldPattern = qr/([ \t]*)([0-9]*)F[ \t]+([^ \t]+)[ \t]+([^<br/>\t\r\n]+)(.*)/; # &quot;1F S_Diagnostic1 62&quot; OR &quot; F S_Diagnostic1 62&quot; OR &quot; F<br/>S_Diagnostic1 62&quot; are synonymous, etc<br/><br/>my $testData0 = &lt;&lt;&#39;_EOGTESTA_&#39;;<br/>RECORD<br/>F ptc_record_length 00B6<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>.<br/>_EOGTESTA_<br/><br/>my $testData1 = &lt;&lt;&#39;_EOGTESTA_&#39;;<br/>RECORD<br/>#input_id 91210758171x001_0013<br/>#input_type PTC<br/>#output_type MTC<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>#jingalama valuewith#inIt andaSpace<br/>.<br/>_EOGTESTA_<br/><br/>my $testData2 = &lt;&lt;&#39;_EOGTESTA_&#39;;<br/>RECORD<br/>F ptc_record_length 00B6<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>#input_id 91210758171x001_0013<br/>#input_type PTC<br/>#output_type MTC<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>#jingalama valuewith#inIt andaSpace<br/>.<br/>_EOGTESTA_<br/><br/>my $testData3 = &lt;&lt;&#39;_EOGTESTA_&#39;;<br/>RECORD<br/>#input_id 91210758171x001_0013<br/>#input_type PTC<br/>#output_type MTC<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>#jingalama valuewith#inIt andaSpace<br/>F ptc_record_length 00B6<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>.<br/>_EOGTESTA_<br/><br/>my $testData4 = &lt;&lt;&#39;_EOGTESTA_&#39;;<br/>RECORD<br/>#input_id 91210758171x001_0013<br/>#output_id<br/>#input_type PTC<br/>#output_type PTC<br/>#addkey<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>F ptc_record_length 00B6<br/>F ptc_record_type<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>F ptc_term_mcz_change_direction<br/>.<br/>_EOGTESTA_<br/><br/>my $parser = Parse::RecDescent-&gt;new($grammar) or die &quot;Bad grammar!\n&quot;;;<br/><br/>print $testData0, &quot;\n\n&quot;;<br/>$parser-&gt;startOfRecord($testData0) ? print &quot;Parsing done sucessfully!\n&quot; :<br/>print &quot;Bad input!\n&quot;;<br/><br/>print $testData1, &quot;\n\n&quot;;<br/>$parser-&gt;startOfRecord($testData1) ? print &quot;Parsing done sucessfully!\n&quot; :<br/>print &quot;Bad input!\n&quot;;<br/><br/>print $testData2, &quot;\n\n&quot;;<br/>$parser-&gt;startOfRecord($testData2) ? print &quot;Parsing done sucessfully!\n&quot; :<br/>print &quot;Bad input!\n&quot;;<br/><br/>print $testData3, &quot;\n\n&quot;;<br/>$parser-&gt;startOfRecord($testData3) ? print &quot;Parsing done sucessfully!\n&quot; :<br/>print &quot;Bad input!\n&quot;;<br/><br/>print $testData4, &quot;\n\n&quot;;<br/>$parser-&gt;startOfRecord($testData4) ? print &quot;Parsing done sucessfully!\n&quot; :<br/>print &quot;Bad input!\n&quot;;<br/><br/>#$parser-&gt;startOfRecord($testData) ? print &quot;Parsing done sucessfully!&quot; : die<br/>&quot;Bad input!\n&quot;;<br/><br/>---code end<br/><br/>Here is STDOUT:<br/><br/>RECORD<br/>F ptc_record_length 00B6<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>.<br/><br/><br/><br/>[*] field(s)<br/>Parsing done sucessfully!<br/>RECORD<br/>#input_id 91210758171x001_0013<br/>#input_type PTC<br/>#output_type MTC<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>#jingalama valuewith#inIt andaSpace<br/>.<br/><br/><br/><br/>[*] metaField(s)<br/>Parsing done sucessfully!<br/>RECORD<br/>F ptc_record_length 00B6<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>#input_id 91210758171x001_0013<br/>#input_type PTC<br/>#output_type MTC<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>#jingalama valuewith#inIt andaSpace<br/>.<br/><br/><br/><br/>[*] field(s)<br/>Bad input!<br/>RECORD<br/>#input_id 91210758171x001_0013<br/>#input_type PTC<br/>#output_type MTC<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>#jingalama valuewith#inIt andaSpace<br/>F ptc_record_length 00B6<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>.<br/><br/><br/><br/>[*] metaField(s)<br/>Bad input!<br/>RECORD<br/>#input_id 91210758171x001_0013<br/>#output_id<br/>#input_type PTC<br/>#output_type PTC<br/>#addkey<br/>#source_id 01<br/>#filename TTFILE01-0001-20080101000000<br/>F ptc_record_length 00B6<br/>F ptc_record_type<br/>F ptc_charging_start_time 20090604093721<br/>F ptc_charging_end_time 20080604093721<br/>F ptc_called_msrn_ton FF<br/>F ptc_term_mcz_duration 060000<br/>F ptc_term_mcz_change_direction<br/>.<br/><br/><br/><br/>[*] metaField(s)<br/>Bad input!<br/><br/>Here&#39;s STDERR:<br/><br/>print() on closed filehandle ERROR at C:/laPerl/site/lib/Parse/RecDescent.pm<br/>line 2905.<br/>Variable &quot;$errortext&quot; is not available at<br/>C:/laPerl/site/lib/Parse/RecDescent.pm line 2906.<br/>Variable &quot;$errorprefix&quot; is not available at<br/>C:/laPerl/site/lib/Parse/RecDescent.pm line 2906.<br/>Use of uninitialized value $errorprefix in formline at<br/>C:/laPerl/site/lib/Parse/RecDescent.pm line 2850.<br/>Use of uninitialized value $errortext in formline at<br/>C:/laPerl/site/lib/Parse/RecDescent.pm line 2850.<br/>Use of uninitialized value $errortext in formline at<br/>C:/laPerl/site/lib/Parse/RecDescent.pm line 2852.<br/>write() on closed filehandle ERROR at C:/laPerl/site/lib/Parse/RecDescent.pm<br/>line 2906.<br/>...<br/><br/>Any suggestions? I am really confused here?<br/><br/>Can anyone figure out what is going wrong (except the choice of ActivePerl<br/>5.10 and WinXP SP2)?<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2009/04/msg526.html Sat, 04 Apr 2009 08:12:54 +0000 TeejesteDrefe by svsxbccscx Hi <br/>&lt;a<br/>href=http://eaobabsh.free-site-host.com/pojilaya_uchitelnica_seksi.html&gt;&iuml;&icirc;&aelig;&egrave;&euml;&agrave;&yuml;<br/>&oacute;&divide;&egrave;&ograve;&aring;&euml;&uuml;&iacute;&egrave;&ouml;&agrave; &ntilde;&aring;&ecirc;&ntilde;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://dwkslknn.free-site-host.com/20_samyh_seksualnyh_klipov_muz_tv.html&gt;20<br/>&ntilde;&agrave;&igrave;&ucirc;&otilde; &ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&otilde; &ecirc;&euml;&egrave;&iuml;&icirc;&acirc; &igrave;&oacute;&ccedil; &ograve;&acirc;&lt;/a&gt;<br/>&lt;a href=http://yjvvngln.free-site-host.com/porno_seks_devushki.html&gt;&iuml;&icirc;&eth;&iacute;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde; &auml;&aring;&acirc;&oacute;&oslash;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a href=http://giejvupu.free-site-host.com/seks_vmesto_diety.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc;&igrave;&aring;&ntilde;&ograve;&icirc; &auml;&egrave;&aring;&ograve;&ucirc;&lt;/a&gt;<br/>&lt;a href=http://guklpgcz.free-site-host.com/seks_shop_odessy.html&gt;&ntilde;&aring;&ecirc;&ntilde; &oslash;&icirc;&iuml;<br/>&icirc;&auml;&aring;&ntilde;&ntilde;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://huwuntcx.free-site-host.com/malchishnik_ili_bolshoi_seks_v_malenkom_gorode.html&gt;&igrave;&agrave;&euml;&uuml;&divide;&egrave;&oslash;&iacute;&egrave;&ecirc;<br/>&egrave;&euml;&egrave; &aacute;&icirc;&euml;&uuml;&oslash;&icirc;&eacute; &ntilde;&aring;&ecirc;&ntilde; &acirc; &igrave;&agrave;&euml;&aring;&iacute;&uuml;&ecirc;&icirc;&igrave; &atilde;&icirc;&eth;&icirc;&auml;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://uouklcym.free-site-host.com/analnyi_seks_videoklipy.html&gt;&agrave;&iacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &acirc;&egrave;&auml;&aring;&icirc;&ecirc;&euml;&egrave;&iuml;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://eaobabsh.free-site-host.com/dvoih_kobelei_dlya_seksa.html&gt;&auml;&acirc;&icirc;&egrave;&otilde;<br/>&ecirc;&icirc;&aacute;&aring;&euml;&aring;&eacute; &auml;&euml;&yuml; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a href=http://chhapprx.free-site-host.com/seks_raby_starpom_rab.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&eth;&agrave;&aacute;&ucirc; &ntilde;&ograve;&agrave;&eth;&iuml;&icirc;&igrave; &eth;&agrave;&aacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://wodbqbzo.free-site-host.com/seks_pervyi_raz_sovety.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&iuml;&aring;&eth;&acirc;&ucirc;&eacute; &eth;&agrave;&ccedil; &ntilde;&icirc;&acirc;&aring;&ograve;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://eaobabsh.free-site-host.com/podglyadyvanie_seks_foto.html&gt;&iuml;&icirc;&auml;&atilde;&euml;&yuml;&auml;&ucirc;&acirc;&agrave;&iacute;&egrave;&aring;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://hjgqvusx.free-site-host.com/foto_seksbomba_s_bolshoi_grudu_i_shirokimi_bedrami.html&gt;&ocirc;&icirc;&ograve;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde;-&aacute;&icirc;&igrave;&aacute;&agrave; &ntilde; &aacute;&icirc;&euml;&uuml;&oslash;&icirc;&eacute; &atilde;&eth;&oacute;&auml;&uuml;&thorn; &egrave; &oslash;&egrave;&eth;&icirc;&ecirc;&egrave;&igrave;&egrave; &aacute;&aring;&auml;&eth;&agrave;&igrave;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://achrsjcz.free-site-host.com/video_seks_v_formate_avi.html&gt;&acirc;&egrave;&auml;&aring;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde; &acirc; &ocirc;&icirc;&eth;&igrave;&agrave;&ograve;&aring; avi&lt;/a&gt;<br/>&lt;a href=http://guklpgcz.free-site-host.com/seksi_medsestra.html&gt;&ntilde;&aring;&ecirc;&ntilde;&egrave;<br/>&igrave;&aring;&auml;&ntilde;&aring;&ntilde;&ograve;&eth;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://huwuntcx.free-site-host.com/znakomstva_seks_foto_ankety.html&gt;&ccedil;&iacute;&agrave;&ecirc;&icirc;&igrave;&ntilde;&ograve;&acirc;&agrave;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc; &agrave;&iacute;&ecirc;&aring;&ograve;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://blodgtjl.free-site-host.com/pervyi_v_jizni_geroya_seksualnyi_opyt_byl_prervan.html&gt;&iuml;&aring;&eth;&acirc;&ucirc;&eacute;<br/>&acirc; &aelig;&egrave;&ccedil;&iacute;&egrave; &atilde;&aring;&eth;&icirc;&yuml; &ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute; &icirc;&iuml;&ucirc;&ograve; &aacute;&ucirc;&euml; &iuml;&eth;&aring;&eth;&acirc;&agrave;&iacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://xzvrlqrp.free-site-host.com/seks_mujskaya_prostata.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&igrave;&oacute;&aelig;&ntilde;&ecirc;&agrave;&yuml; &iuml;&eth;&icirc;&ntilde;&ograve;&agrave;&ograve;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://guklpgcz.free-site-host.com/seksi_kola_porno_foto.html&gt;&ntilde;&aring;&ecirc;&ntilde;&egrave;<br/>&ecirc;&icirc;&euml;&agrave; &iuml;&icirc;&eth;&iacute;&icirc; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbdjaygl.free-site-host.com/jestkii_gruppovoi_seks_porno_foto.html&gt;&aelig;&aring;&ntilde;&ograve;&ecirc;&egrave;&eacute;<br/>&atilde;&eth;&oacute;&iuml;&iuml;&icirc;&acirc;&icirc;&eacute; &ntilde;&aring;&ecirc;&ntilde; &iuml;&icirc;&eth;&iacute;&icirc; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://nudpztzq.free-site-host.com/olga_orlova_seks_foto.html&gt;&icirc;&euml;&uuml;&atilde;&agrave;<br/>&icirc;&eth;&euml;&icirc;&acirc;&agrave; &ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a href=http://qfrhytpo.free-site-host.com/seks_forum_samara.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ocirc;&icirc;&eth;&oacute;&igrave; &ntilde;&agrave;&igrave;&agrave;&eth;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://abndppyg.free-site-host.com/klipy_porno_seks_posmotret_seichas.html&gt;&ecirc;&euml;&egrave;&iuml;&ucirc;<br/>&iuml;&icirc;&eth;&iacute;&icirc; &ntilde;&aring;&ecirc;&ntilde; &iuml;&icirc;&ntilde;&igrave;&icirc;&ograve;&eth;&aring;&ograve;&uuml; &ntilde;&aring;&eacute;&divide;&agrave;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://nxqqlrcu.free-site-host.com/seks_vysokie_kabluki.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc;&ucirc;&ntilde;&icirc;&ecirc;&egrave;&aring; &ecirc;&agrave;&aacute;&euml;&oacute;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbdjaygl.free-site-host.com/duvushki_dlya_seksa_v_cheboksarah.html&gt;&auml;&oacute;&acirc;&oacute;&oslash;&ecirc;&egrave;<br/>&auml;&euml;&yuml; &ntilde;&aring;&ecirc;&ntilde;&agrave; &acirc; &divide;&aring;&aacute;&icirc;&ecirc;&ntilde;&agrave;&eth;&agrave;&otilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://xzvrlqrp.free-site-host.com/seks_komu_za_30_evgeniya_36_let_novogireevo.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ecirc;&icirc;&igrave;&oacute; &ccedil;&agrave; 30 &aring;&acirc;&atilde;&aring;&iacute;&egrave;&yuml; 36 &euml;&aring;&ograve; &iacute;&icirc;&acirc;&icirc;&atilde;&egrave;&eth;&aring;&aring;&acirc;&icirc;&lt;/a&gt;<br/>&lt;a href=http://hjgqvusx.free-site-host.com/foto_seks_porno_zvezd.html&gt;&ocirc;&icirc;&ograve;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde; &iuml;&icirc;&eth;&iacute;&icirc; &ccedil;&acirc;&aring;&ccedil;&auml;&lt;/a&gt;<br/>&lt;a<br/>href=http://dxnzqdak.free-site-host.com/skachat_besplatno_video_oralnyi_seks.html&gt;&ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;<br/>&aacute;&aring;&ntilde;&iuml;&euml;&agrave;&ograve;&iacute;&icirc; &acirc;&egrave;&auml;&aring;&icirc; &icirc;&eth;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbdjaygl.free-site-host.com/fazy_psihoseksualnogo_razvitiya_cheloveka_po_freidu.html&gt;&ocirc;&agrave;&ccedil;&ucirc;<br/>&iuml;&ntilde;&egrave;&otilde;&icirc;-&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&icirc;&atilde;&icirc; &eth;&agrave;&ccedil;&acirc;&egrave;&ograve;&egrave;&yuml; &divide;&aring;&euml;&icirc;&acirc;&aring;&ecirc;&agrave; &iuml;&icirc; &ocirc;&eth;&aring;&eacute;&auml;&oacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://txvfokfs.free-site-host.com/skachat_seks_film_bezplatno.html&gt;&ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&egrave;&euml;&uuml;&igrave; &aacute;&aring;&ccedil;&iuml;&euml;&agrave;&ograve;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a href=http://yuatobgj.free-site-host.com/chat_pro_seks_kiev.html&gt;&divide;&agrave;&ograve; &iuml;&eth;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde; &ecirc;&egrave;&aring;&acirc;&lt;/a&gt;<br/>&lt;a href=http://jfqshxve.free-site-host.com/seks_ryjie_foto.html&gt;&ntilde;&aring;&ecirc;&ntilde; &eth;&ucirc;&aelig;&egrave;&aring;<br/>&ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://hhtswqzd.free-site-host.com/hochu_seksa_bez_obyazatelstv.html&gt;&otilde;&icirc;&divide;&oacute;<br/>&ntilde;&aring;&ecirc;&ntilde;&agrave; &aacute;&aring;&ccedil; &icirc;&aacute;&yuml;&ccedil;&agrave;&ograve;&aring;&euml;&uuml;&ntilde;&ograve;&acirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://wnljgwil.free-site-host.com/moi_seksualnyi_uchitel_foto.html&gt;&igrave;&icirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute; &oacute;&divide;&egrave;&ograve;&aring;&euml;&uuml; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://wnljgwil.free-site-host.com/nazvanie_sredstva_dlya_lechenie_seksualnyh_problem_u_jenscin.html&gt;&iacute;&agrave;&ccedil;&acirc;&agrave;&iacute;&egrave;&aring;<br/>&ntilde;&eth;&aring;&auml;&ntilde;&ograve;&acirc;&agrave; &auml;&euml;&yuml; &euml;&aring;&divide;&aring;&iacute;&egrave;&aring; &ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&otilde; &iuml;&eth;&icirc;&aacute;&euml;&aring;&igrave; &oacute; &aelig;&aring;&iacute;&ugrave;&egrave;&iacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://ejalhqul.free-site-host.com/porno_filmy_seks_so_vzroslymi.html&gt;&iuml;&icirc;&eth;&iacute;&icirc;<br/>&ocirc;&egrave;&euml;&uuml;&igrave;&ucirc; &ntilde;&aring;&ecirc;&ntilde; &ntilde;&icirc; &acirc;&ccedil;&eth;&icirc;&ntilde;&euml;&ucirc;&igrave;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://dngpkrqd.free-site-host.com/seksualnye_znakomstva_v_tallinne.html&gt;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring;<br/>&ccedil;&iacute;&agrave;&ecirc;&icirc;&igrave;&ntilde;&ograve;&acirc;&agrave; &acirc; &ograve;&agrave;&euml;&euml;&egrave;&iacute;&iacute;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://tglzbqon.free-site-host.com/seks_v_drugom_gorode_1_2_3_sezony_skachat_besplatno.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc; &auml;&eth;&oacute;&atilde;&icirc;&igrave; &atilde;&icirc;&eth;&icirc;&auml;&aring; 1 2 3 &ntilde;&aring;&ccedil;&icirc;&iacute;&ucirc; &ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml; &aacute;&aring;&ntilde;&iuml;&euml;&agrave;&ograve;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a href=http://qfrhytpo.free-site-host.com/seks_foto_13_letnie.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ocirc;&icirc;&ograve;&icirc; 13 &euml;&aring;&ograve;&iacute;&egrave;&aring;&lt;/a&gt;<br/>&lt;a href=http://uswtdizi.free-site-host.com/seks_uslugi_habarovsk.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&oacute;&ntilde;&euml;&oacute;&atilde;&egrave; &otilde;&agrave;&aacute;&agrave;&eth;&icirc;&acirc;&ntilde;&ecirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://dxnzqdak.free-site-host.com/seksualnyi_striptiz_skachat.html&gt;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;<br/>&ntilde;&ograve;&eth;&egrave;&iuml;&ograve;&egrave;&ccedil; &ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;&lt;/a&gt;<br/>&lt;a href=http://wodbqbzo.free-site-host.com/seks_ochevidec.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&icirc;&divide;&aring;&acirc;&egrave;&auml;&aring;&ouml;&lt;/a&gt;<br/>&lt;a<br/>href=http://uhvontsv.free-site-host.com/rasskaz_seks_na_lavochke.html&gt;&eth;&agrave;&ntilde;&ntilde;&ecirc;&agrave;&ccedil;<br/>&ntilde;&aring;&ecirc;&ntilde; &iacute;&agrave; &euml;&agrave;&acirc;&icirc;&divide;&ecirc;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://bczcsumm.free-site-host.com/seksualnye_mujskie_djinsy.html&gt;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring;<br/>&igrave;&oacute;&aelig;&ntilde;&ecirc;&egrave;&aring; &auml;&aelig;&egrave;&iacute;&ntilde;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://xtgbqcmo.free-site-host.com/foto_gruppovyh_seks_vecherinok.html&gt;&ocirc;&icirc;&ograve;&icirc;<br/>&atilde;&eth;&oacute;&iuml;&iuml;&icirc;&acirc;&ucirc;&otilde; &ntilde;&aring;&ecirc;&ntilde; &acirc;&aring;&divide;&aring;&eth;&egrave;&iacute;&icirc;&ecirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://ydzmbrsg.free-site-host.com/seks_znakomstva_jensciny.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ccedil;&iacute;&agrave;&ecirc;&icirc;&igrave;&ntilde;&ograve;&acirc;&agrave; &aelig;&aring;&iacute;&ugrave;&egrave;&iacute;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://gmgzpdkb.free-site-host.com/smotret_foto_seks_s_pyanoi_v_tualete.html&gt;&ntilde;&igrave;&icirc;&ograve;&eth;&aring;&ograve;&uuml;<br/>&ocirc;&icirc;&ograve;&icirc; &ntilde;&aring;&ecirc;&ntilde; &ntilde; &iuml;&uuml;&yuml;&iacute;&icirc;&eacute; &acirc; &ograve;&oacute;&agrave;&euml;&aring;&ograve;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://uouklcym.free-site-host.com/analnyi_seks_smotret_foto_besplatno.html&gt;&agrave;&iacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &ntilde;&igrave;&icirc;&ograve;&eth;&aring;&ograve;&uuml; &ocirc;&icirc;&ograve;&icirc; &aacute;&aring;&ntilde;&iuml;&euml;&agrave;&ograve;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://dwkslknn.free-site-host.com/kak_usmirit_seksualnyi_pyl_lubimogo.html&gt;&ecirc;&agrave;&ecirc;<br/>&oacute;&ntilde;&igrave;&egrave;&eth;&egrave;&ograve;&uuml; &ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute; &iuml;&ucirc;&euml; &euml;&thorn;&aacute;&egrave;&igrave;&icirc;&atilde;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://uouklcym.free-site-host.com/analnyi_seks_kitayanok.html&gt;&agrave;&iacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &ecirc;&egrave;&ograve;&agrave;&yuml;&iacute;&icirc;&ecirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://yvvgnupa.free-site-host.com/gei_parni_mujchiny_seks_foto.html&gt;&atilde;&aring;&eacute;<br/>&iuml;&agrave;&eth;&iacute;&egrave; &igrave;&oacute;&aelig;&divide;&egrave;&iacute;&ucirc; &ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://thohwilj.free-site-host.com/buryi_medved_seks_vtroem.html&gt;&aacute;&oacute;&eth;&ucirc;&eacute;<br/>&igrave;&aring;&auml;&acirc;&aring;&auml;&uuml; &ntilde;&aring;&ecirc;&ntilde; &acirc;&ograve;&eth;&icirc;&aring;&igrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://ydzmbrsg.free-site-host.com/seks_individualki_himki.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&egrave;&iacute;&auml;&egrave;&acirc;&egrave;&auml;&oacute;&agrave;&euml;&ecirc;&egrave; &otilde;&egrave;&igrave;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://uhvontsv.free-site-host.com/videorolik_seks_analnyi.html&gt;&acirc;&egrave;&auml;&aring;&icirc;&eth;&icirc;&euml;&egrave;&ecirc;<br/>&ntilde;&aring;&ecirc;&ntilde; &agrave;&iacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;&lt;/a&gt;<br/>&lt;a href=http://ydzmbrsg.free-site-host.com/seks_i_ne_tolko.html&gt;&ntilde;&aring;&ecirc;&ntilde; &egrave; &iacute;&aring;<br/>&ograve;&icirc;&euml;&uuml;&ecirc;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://txvfokfs.free-site-host.com/skachat_foto_seksa_loshadei.html&gt;&ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;<br/>&ocirc;&icirc;&ograve;&icirc; &ntilde;&aring;&ecirc;&ntilde;&agrave; &euml;&icirc;&oslash;&agrave;&auml;&aring;&eacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://dwkslknn.free-site-host.com/kak_naiti_transseksuala_v_pitere.html&gt;&ecirc;&agrave;&ecirc;<br/>&iacute;&agrave;&eacute;&ograve;&egrave; &ograve;&eth;&agrave;&iacute;&ntilde;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&agrave; &acirc; &iuml;&egrave;&ograve;&aring;&eth;&aring;&lt;/a&gt;<br/>&lt;a href=http://tglzbqon.free-site-host.com/seks_video_obmen_fail.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc;&egrave;&auml;&aring;&icirc; &icirc;&aacute;&igrave;&aring;&iacute; &ocirc;&agrave;&eacute;&euml;&lt;/a&gt;<br/>&lt;a<br/>href=http://lfudigga.free-site-host.com/prostitutki_moskvy_vyezd_nedorogo.html&gt;&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;<br/>&igrave;&icirc;&ntilde;&ecirc;&acirc;&ucirc; &acirc;&ucirc;&aring;&ccedil;&auml; &iacute;&aring;&auml;&icirc;&eth;&icirc;&atilde;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://guklpgcz.free-site-host.com/seksi_fotki_jeny_merlina_mensona.html&gt;&ntilde;&aring;&ecirc;&ntilde;&egrave;<br/>&ocirc;&icirc;&ograve;&ecirc;&egrave; &aelig;&aring;&iacute;&ucirc; &igrave;&aring;&eth;&euml;&egrave;&iacute;&agrave; &igrave;&aring;&iacute;&ntilde;&icirc;&iacute;&agrave;&lt;/a&gt;<br/>&lt;a href=http://ejalhqul.free-site-host.com/parije_seks_shopi.html&gt;&iuml;&agrave;&eth;&egrave;&aelig;&aring;<br/>&ntilde;&aring;&ecirc;&ntilde; &oslash;&icirc;&iuml;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://yjvvngln.free-site-host.com/porno_seks_krupnym_planom.html&gt;&iuml;&icirc;&eth;&iacute;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde; &ecirc;&eth;&oacute;&iuml;&iacute;&ucirc;&igrave; &iuml;&euml;&agrave;&iacute;&icirc;&igrave;&lt;/a&gt;<br/>&lt;a href=http://guklpgcz.free-site-host.com/seksa_na_plyaje.html&gt;&ntilde;&aring;&ecirc;&ntilde;&agrave; &iacute;&agrave;<br/>&iuml;&euml;&yuml;&aelig;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://hhtswqzd.free-site-host.com/fotografii_seks_cherez_dyrku.html&gt;&ocirc;&icirc;&ograve;&icirc;&atilde;&eth;&agrave;&ocirc;&egrave;&egrave;<br/>&ntilde;&aring;&ecirc;&ntilde; &divide;&aring;&eth;&aring;&ccedil; &auml;&ucirc;&eth;&ecirc;&oacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://dwkslknn.free-site-host.com/kartinki_zanyatie_seksom.html&gt;&ecirc;&agrave;&eth;&ograve;&egrave;&iacute;&ecirc;&egrave;<br/>&ccedil;&agrave;&iacute;&yuml;&ograve;&egrave;&aring; &ntilde;&aring;&ecirc;&ntilde;&icirc;&igrave;&lt;/a&gt;<br/>&lt;a href=http://qfrhytpo.free-site-host.com/seks_forum_volgograda.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ocirc;&icirc;&eth;&oacute;&igrave; &acirc;&icirc;&euml;&atilde;&icirc;&atilde;&eth;&agrave;&auml;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://huwuntcx.free-site-host.com/izvrasceniya_seks.html&gt;&egrave;&ccedil;&acirc;&eth;&agrave;&ugrave;&aring;&iacute;&egrave;&yuml;<br/>&ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://ejalhqul.free-site-host.com/referat_rafael_santi_sekstinskaya_madonna.html&gt;&eth;&aring;&ocirc;&aring;&eth;&agrave;&ograve;<br/>&eth;&agrave;&ocirc;&agrave;&yacute;&euml;&uuml; &ntilde;&agrave;&iacute;&ograve;&egrave; &quot;&ntilde;&aring;&ecirc;&ntilde;&ograve;&egrave;&iacute;&ntilde;&ecirc;&agrave;&yuml; &igrave;&agrave;&auml;&icirc;&iacute;&iacute;&agrave;&quot;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbdjaygl.free-site-host.com/veb_kamery_habarovsk_seks.html&gt;&acirc;&aring;&aacute;<br/>&ecirc;&agrave;&igrave;&aring;&eth;&ucirc; &otilde;&agrave;&aacute;&agrave;&eth;&icirc;&acirc;&ntilde;&ecirc; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbdjaygl.free-site-host.com/sonnik_zanimatsya_seksom.html&gt;&ntilde;&icirc;&iacute;&iacute;&egrave;&ecirc;<br/>&ccedil;&agrave;&iacute;&egrave;&igrave;&agrave;&ograve;&uuml;&ntilde;&yuml; &ntilde;&aring;&ecirc;&ntilde;&icirc;&igrave;&lt;/a&gt;<br/>&lt;a href=http://xtgbqcmo.free-site-host.com/flesh_igry_pro_seks.html&gt;&ocirc;&euml;&yacute;&oslash;<br/>&egrave;&atilde;&eth;&ucirc; &iuml;&eth;&icirc; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://uswtdizi.free-site-host.com/seks_ubiistva.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&oacute;&aacute;&egrave;&eacute;&ntilde;&ograve;&acirc;&agrave;&lt;/a&gt;<br/>&lt;a href=http://lfvgtprf.free-site-host.com/jyvotnyi_seks.html&gt;&aelig;&ucirc;&acirc;&icirc;&ograve;&iacute;&ucirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://szroieig.free-site-host.com/prostitutki_iz_afriki.html&gt;&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;<br/>&egrave;&ccedil; &agrave;&ocirc;&eth;&egrave;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a href=http://xzvrlqrp.free-site-host.com/seks_kitaec.html&gt;&ntilde;&aring;&ecirc;&ntilde; &ecirc;&egrave;&ograve;&agrave;&aring;&ouml;&lt;/a&gt;<br/>&lt;a href=http://jfqshxve.free-site-host.com/seks_skachat_rolik.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml; &eth;&icirc;&euml;&egrave;&ecirc;&lt;/a&gt;<br/>&lt;a href=http://ydzmbrsg.free-site-host.com/seks_i_porno_incest.html&gt;&ntilde;&aring;&ecirc;&ntilde; &egrave;<br/>&iuml;&icirc;&eth;&iacute;&icirc; &egrave;&iacute;&ouml;&aring;&ntilde;&ograve;&lt;/a&gt;<br/>&lt;a<br/>href=http://jfqshxve.free-site-host.com/seks_s_devochkami_15_let.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ntilde; &auml;&aring;&acirc;&icirc;&divide;&ecirc;&agrave;&igrave;&egrave; 15 &euml;&aring;&ograve;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbwmudll.free-site-host.com/eroticheskme_rasskazy_transseksualy.html&gt;&yacute;&eth;&icirc;&ograve;&egrave;&divide;&aring;&ntilde;&ecirc;&igrave;&aring;<br/>&eth;&agrave;&ntilde;&ntilde;&ecirc;&agrave;&ccedil;&ucirc; &ograve;&eth;&agrave;&iacute;&ntilde;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://lfudigga.free-site-host.com/prostitutki_dnepra.html&gt;&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;<br/>&auml;&iacute;&aring;&iuml;&eth;&agrave;&lt;/a&gt;<br/>&lt;a href=http://hhtswqzd.free-site-host.com/chat_seks_flirt.html&gt;&divide;&agrave;&ograve; &ntilde;&aring;&ecirc;&ntilde;<br/>&ocirc;&euml;&egrave;&eth;&ograve;&lt;/a&gt;<br/>&lt;a<br/>href=http://ejalhqul.free-site-host.com/polno_lesbi_v_tumeni_seks_pornografiya_foto.html&gt;&iuml;&icirc;&euml;&iacute;&icirc;<br/>&euml;&aring;&ntilde;&aacute;&egrave; &acirc; &ograve;&thorn;&igrave;&aring;&iacute;&egrave; &ntilde;&aring;&ecirc;&ntilde; &iuml;&icirc;&eth;&iacute;&icirc;&atilde;&eth;&agrave;&ocirc;&egrave;&yuml; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a href=http://hhtswqzd.free-site-host.com/hill_koroleva_seksa.html&gt;&otilde;&egrave;&euml;&euml;<br/>&ecirc;&icirc;&eth;&icirc;&euml;&aring;&acirc;&agrave; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a href=http://uouklcym.free-site-host.com/tailand_seks_foto.html&gt;&ograve;&agrave;&eacute;&euml;&agrave;&iacute;&auml;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://jfqshxve.free-site-host.com/seks_s_molodenkimi_devochkami_14_15_16_17_let.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ntilde; &igrave;&icirc;&euml;&icirc;&auml;&aring;&iacute;&uuml;&ecirc;&egrave;&igrave;&egrave; &auml;&aring;&acirc;&icirc;&divide;&ecirc;&agrave;&igrave;&egrave; 14 15 16 17 &euml;&aring;&ograve;&lt;/a&gt;<br/>&lt;a<br/>href=http://lfudigga.free-site-host.com/prostitutki_voroneja.html&gt;&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;<br/>&acirc;&icirc;&eth;&icirc;&iacute;&aring;&aelig;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://jfqshxve.free-site-host.com/seks_s_jivotnymi_vidio.html&gt;&ntilde;&aring;&ecirc;&ntilde; &ntilde;<br/>&aelig;&egrave;&acirc;&icirc;&ograve;&iacute;&ucirc;&igrave;&egrave; &acirc;&egrave;&auml;&egrave;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://txvfokfs.free-site-host.com/skachat_seks_s_peris.html&gt;&ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;<br/>&ntilde;&aring;&ecirc;&ntilde; &ntilde; &iuml;&yacute;&eth;&egrave;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://qfrhytpo.free-site-host.com/seks_forum_krasnodar.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ocirc;&icirc;&eth;&oacute;&igrave; &ecirc;&eth;&agrave;&ntilde;&iacute;&icirc;&auml;&agrave;&eth;&lt;/a&gt;<br/>&lt;a<br/>href=http://thohwilj.free-site-host.com/samye_intimnye_foto_seksa.html&gt;&ntilde;&agrave;&igrave;&ucirc;&aring;<br/>&egrave;&iacute;&ograve;&egrave;&igrave;&iacute;&ucirc;&aring; &ocirc;&icirc;&ograve;&icirc; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://wnljgwil.free-site-host.com/zanimautsya_seksom_vpyaterom.html&gt;&ccedil;&agrave;&iacute;&egrave;&igrave;&agrave;&thorn;&ograve;&ntilde;&yuml;<br/>&ntilde;&aring;&ecirc;&ntilde;&icirc;&igrave; &acirc;&iuml;&yuml;&ograve;&aring;&eth;&icirc;&igrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://uhvontsv.free-site-host.com/volgogradskie_seks_chaty.html&gt;&acirc;&icirc;&euml;&atilde;&icirc;&atilde;&eth;&agrave;&auml;&ntilde;&ecirc;&egrave;&aring;<br/>&ntilde;&aring;&ecirc;&ntilde; &divide;&agrave;&ograve;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://eaobabsh.free-site-host.com/povedenie_posle_seksa.html&gt;&iuml;&icirc;&acirc;&aring;&auml;&aring;&iacute;&egrave;&aring;<br/>&iuml;&icirc;&ntilde;&euml;&aring; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://yjvvngln.free-site-host.com/porno_publichnyi_seks.html&gt;&iuml;&icirc;&eth;&iacute;&icirc;<br/>&iuml;&oacute;&aacute;&euml;&egrave;&divide;&iacute;&ucirc;&eacute; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://xtgbqcmo.free-site-host.com/www_dom_2_ru_seks.html&gt;www dom<br/>2 ru &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://nxqqlrcu.free-site-host.com/seks_vyezd_moskva.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc;&ucirc;&aring;&ccedil;&auml; &igrave;&icirc;&ntilde;&ecirc;&acirc;&agrave;&lt;/a&gt;<br/>&lt;a href=http://chhapprx.free-site-host.com/seks_rasskazy_rebenok.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&eth;&agrave;&ntilde;&ntilde;&ecirc;&agrave;&ccedil;&ucirc; &eth;&aring;&aacute;&aring;&iacute;&icirc;&ecirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://dxnzqdak.free-site-host.com/serebryanyi_bor_seks_foto.html&gt;&ntilde;&aring;&eth;&aring;&aacute;&eth;&yuml;&iacute;&ucirc;&eacute;<br/>&aacute;&icirc;&eth; &ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a href=http://nxqqlrcu.free-site-host.com/seks_devochki_skachat.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&auml;&aring;&acirc;&icirc;&divide;&ecirc;&egrave; &ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;&lt;/a&gt;<br/>&lt;a<br/>href=http://eaobabsh.free-site-host.com/gruppovoi_seks_maloletki.html&gt;&atilde;&eth;&oacute;&iuml;&iuml;&icirc;&acirc;&icirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &igrave;&agrave;&euml;&icirc;&euml;&aring;&ograve;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a href=http://lfvgtprf.free-site-host.com/jenskii_seks_ru.html&gt;&aelig;&aring;&iacute;&ntilde;&ecirc;&egrave;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; ru&lt;/a&gt;<br/>&lt;a<br/>href=http://gmgzpdkb.free-site-host.com/molodejseksualnye_orientacii.html&gt;&igrave;&icirc;&euml;&icirc;&auml;&aring;&aelig;&uuml;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring;<br/>&icirc;&eth;&egrave;&aring;&iacute;&ograve;&agrave;&ouml;&egrave;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://tglzbqon.free-site-host.com/seks_vecherinki_skrytaya_kamera.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc;&aring;&divide;&aring;&eth;&egrave;&iacute;&ecirc;&egrave; &ntilde;&ecirc;&eth;&ucirc;&ograve;&agrave;&yuml; &ecirc;&agrave;&igrave;&aring;&eth;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://txvfokfs.free-site-host.com/bezumno_hochu_seksa_detka_moya.html&gt;&aacute;&aring;&ccedil;&oacute;&igrave;&iacute;&icirc;<br/>&otilde;&icirc;&divide;&oacute; &ntilde;&aring;&ecirc;&ntilde;&agrave; &auml;&aring;&ograve;&ecirc;&agrave; &igrave;&icirc;&yuml;&lt;/a&gt;<br/>&lt;a href=http://guklpgcz.free-site-host.com/seks_shopy_peterburga.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&oslash;&icirc;&iuml;&ucirc; &iuml;&aring;&ograve;&aring;&eth;&aacute;&oacute;&eth;&atilde;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://abndppyg.free-site-host.com/klub_3_lubov_seks_svadba_na_mtv_vse_o_seriale.html&gt;&ecirc;&euml;&oacute;&aacute;<br/>3 &euml;&thorn;&aacute;&icirc;&acirc;&uuml; &ntilde;&aring;&ecirc;&ntilde; &ntilde;&acirc;&agrave;&auml;&uuml;&aacute;&agrave; &iacute;&agrave; mtv &acirc;&ntilde;&aring; &icirc; &ntilde;&aring;&eth;&egrave;&agrave;&euml;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://aaujvnei.free-site-host.com/skachat_nikita_seks.html&gt;&ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;<br/>&iacute;&egrave;&ecirc;&egrave;&ograve;&agrave; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://eaobabsh.free-site-host.com/grubyi_seks_s_devochkami.html&gt;&atilde;&eth;&oacute;&aacute;&ucirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &ntilde; &auml;&aring;&acirc;&icirc;&divide;&ecirc;&agrave;&igrave;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://yuatobgj.free-site-host.com/shluhi_prostitutki_devochki_seks.html&gt;&oslash;&euml;&thorn;&otilde;&egrave;<br/>&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave; &auml;&aring;&acirc;&icirc;&divide;&ecirc;&egrave; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://abndppyg.free-site-host.com/knigi_tantricheskii_seks.html&gt;&ecirc;&iacute;&egrave;&atilde;&egrave;<br/>&ograve;&agrave;&iacute;&ograve;&eth;&egrave;&divide;&aring;&ntilde;&ecirc;&egrave;&eacute; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://ydzmbrsg.free-site-host.com/seks_intim_chelyabinsk_prostitutki.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&egrave;&iacute;&ograve;&egrave;&igrave; &divide;&aring;&euml;&yuml;&aacute;&egrave;&iacute;&ntilde;&ecirc; &iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a href=http://gbwmudll.free-site-host.com/12_15_seks.html&gt;12 15 &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://txvfokfs.free-site-host.com/belovo_seks.html&gt;&aacute;&aring;&euml;&icirc;&acirc;&icirc; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://wodbqbzo.free-site-host.com/seks_porno_video_fragment.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&iuml;&icirc;&eth;&iacute;&icirc; &acirc;&egrave;&auml;&aring;&icirc; &ocirc;&eth;&agrave;&atilde;&igrave;&aring;&iacute;&ograve;&lt;/a&gt;<br/>&lt;a href=http://jfqshxve.free-site-host.com/seks_s_pameloi.html&gt;&ntilde;&aring;&ecirc;&ntilde; &ntilde;<br/>&iuml;&agrave;&igrave;&aring;&euml;&icirc;&eacute;&lt;/a&gt;<br/>&lt;a href=http://xzvrlqrp.free-site-host.com/seks_materu_foto.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&igrave;&agrave;&ograve;&aring;&eth;&uuml;&thorn; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a href=http://hjgqvusx.free-site-host.com/foto_pilot_seks.html&gt;&ocirc;&icirc;&ograve;&icirc; &iuml;&egrave;&euml;&icirc;&ograve;<br/>&ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://zietdphp.free-site-host.com/lubov_seks_znakomstva.html&gt;&euml;&thorn;&aacute;&icirc;&acirc;&uuml;<br/>&ntilde;&aring;&ecirc;&ntilde; &ccedil;&iacute;&agrave;&ecirc;&icirc;&igrave;&ntilde;&ograve;&acirc;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://uhvontsv.free-site-host.com/referaty_seksualnye_otkloneniya.html&gt;&eth;&aring;&ocirc;&aring;&eth;&agrave;&ograve;&ucirc;<br/>&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring; &icirc;&ograve;&ecirc;&euml;&icirc;&iacute;&aring;&iacute;&egrave;&yuml;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbwmudll.free-site-host.com/alizee_porno_golaya_seks.html&gt;alizee<br/>porno &atilde;&icirc;&euml;&agrave;&yuml; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://ejalhqul.free-site-host.com/porno_kassety_seks_erotika.html&gt;&iuml;&icirc;&eth;&iacute;&icirc;<br/>&ecirc;&agrave;&ntilde;&ntilde;&aring;&ograve;&ucirc; &ntilde;&aring;&ecirc;&ntilde; &yacute;&eth;&icirc;&ograve;&egrave;&ecirc;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://lfudigga.free-site-host.com/prostitutki_g_ulyanovsk.html&gt;&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;<br/>&atilde; &oacute;&euml;&uuml;&yuml;&iacute;&icirc;&acirc;&ntilde;&ecirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://zietdphp.free-site-host.com/kriminalnye_novosti_uchitelya_seks_deti_i_shkola.html&gt;&ecirc;&eth;&egrave;&igrave;&egrave;&iacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring;<br/>&iacute;&icirc;&acirc;&icirc;&ntilde;&ograve;&egrave; &oacute;&divide;&egrave;&ograve;&aring;&euml;&yuml; &ntilde;&aring;&ecirc;&ntilde; &auml;&aring;&ograve;&egrave; &egrave; &oslash;&ecirc;&icirc;&euml;&agrave;&lt;/a&gt;<br/>&lt;a href=http://tglzbqon.free-site-host.com/seks_v_sadike.html&gt;&ntilde;&aring;&ecirc;&ntilde; &acirc;<br/>&ntilde;&agrave;&auml;&egrave;&ecirc;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://uouklcym.free-site-host.com/analnyi_seks_bolno.html&gt;&agrave;&iacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &aacute;&icirc;&euml;&uuml;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://huwuntcx.free-site-host.com/znakomstva_regulyarnyi_seks.html&gt;&ccedil;&iacute;&agrave;&ecirc;&icirc;&igrave;&ntilde;&ograve;&acirc;&agrave;<br/>&eth;&aring;&atilde;&oacute;&euml;&yuml;&eth;&iacute;&ucirc;&eacute; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://aaujvnei.free-site-host.com/skachat_seks_pamely_anderson_i_tomi_li.html&gt;&ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;<br/>&ntilde;&aring;&ecirc;&ntilde; &iuml;&agrave;&igrave;&aring;&euml;&ucirc; &agrave;&iacute;&auml;&aring;&eth;&ntilde;&icirc;&iacute; &egrave; &ograve;&icirc;&igrave;&egrave; &euml;&egrave;&lt;/a&gt;<br/>&lt;a href=http://gbwmudll.free-site-host.com/3d_kartinki_seks.html&gt;3d<br/>&ecirc;&agrave;&eth;&ograve;&egrave;&iacute;&ecirc;&egrave; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://tglzbqon.free-site-host.com/seks_berezniki.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&aacute;&aring;&eth;&aring;&ccedil;&iacute;&egrave;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://xtgbqcmo.free-site-host.com/forum_jenscin_iscuscih_seksa.html&gt;&ocirc;&icirc;&eth;&oacute;&igrave;<br/>&aelig;&aring;&iacute;&ugrave;&egrave;&iacute; &egrave;&ugrave;&oacute;&ugrave;&egrave;&otilde; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbdjaygl.free-site-host.com/soundtrack_seks_v_bolshom_gorode_skachat.html&gt;soundtrack<br/>&ntilde;&aring;&ecirc;&ntilde; &acirc; &aacute;&icirc;&euml;&uuml;&oslash;&icirc;&igrave; &atilde;&icirc;&eth;&icirc;&auml;&aring; &ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;&lt;/a&gt;<br/>&lt;a href=http://xzvrlqrp.free-site-host.com/seks_koza.html&gt;&ntilde;&aring;&ecirc;&ntilde; &ecirc;&icirc;&ccedil;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://ydzmbrsg.free-site-host.com/seks_iznasilovanie_detei.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&egrave;&ccedil;&iacute;&agrave;&ntilde;&egrave;&euml;&icirc;&acirc;&agrave;&iacute;&egrave;&aring; &auml;&aring;&ograve;&aring;&eacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://ejalhqul.free-site-host.com/porno_i_seks_i_blyadstvo.html&gt;&iuml;&icirc;&eth;&iacute;&icirc;<br/>&egrave; &ntilde;&aring;&ecirc;&ntilde; &egrave; &aacute;&euml;&yuml;&auml;&ntilde;&ograve;&acirc;&icirc;&lt;/a&gt;<br/>&lt;a href=http://yvvgnupa.free-site-host.com/gei_gruppa_seks_foto.html&gt;&atilde;&aring;&eacute;<br/>&atilde;&eth;&oacute;&iuml;&iuml;&agrave; &ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://uhvontsv.free-site-host.com/virtualnyi_seks_znakomstva_gei.html&gt;&acirc;&egrave;&eth;&ograve;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &ccedil;&iacute;&agrave;&ecirc;&icirc;&igrave;&ntilde;&ograve;&acirc;&agrave; &atilde;&aring;&eacute;&lt;/a&gt;<br/>&lt;a href=http://uouklcym.free-site-host.com/anime_seksi.html&gt;&agrave;&iacute;&egrave;&igrave;&aring; &ntilde;&aring;&ecirc;&ntilde;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://blodgtjl.free-site-host.com/ochen_seksualnye_foto_devushek.html&gt;&icirc;&divide;&aring;&iacute;&uuml;<br/>&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring; &ocirc;&icirc;&ograve;&icirc; &auml;&aring;&acirc;&oacute;&oslash;&aring;&ecirc;&lt;/a&gt;<br/>&lt;a href=http://uswtdizi.free-site-host.com/seks_turizm_chehii.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ograve;&oacute;&eth;&egrave;&ccedil;&igrave; &divide;&aring;&otilde;&egrave;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://wnljgwil.free-site-host.com/moskva_seksualnye_menshinstva.html&gt;&igrave;&icirc;&ntilde;&ecirc;&acirc;&agrave;<br/>&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring; &igrave;&aring;&iacute;&uuml;&oslash;&egrave;&iacute;&ntilde;&ograve;&acirc;&agrave;&lt;/a&gt;<br/>&lt;a href=http://xzvrlqrp.free-site-host.com/seks_kruto_foto.html&gt;&ntilde;&aring;&ecirc;&ntilde; &ecirc;&eth;&oacute;&ograve;&icirc;<br/>&ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a href=http://dwkslknn.free-site-host.com/kalorii_seks.html&gt;&ecirc;&agrave;&euml;&icirc;&eth;&egrave;&egrave;<br/>&ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://uswtdizi.free-site-host.com/seks_so_staruhoi_foto.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ntilde;&icirc; &ntilde;&ograve;&agrave;&eth;&oacute;&otilde;&icirc;&eacute; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a href=http://hhtswqzd.free-site-host.com/hhh_zoo_seks_foto.html&gt;&otilde;&otilde;&otilde; &ccedil;&icirc;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://thohwilj.free-site-host.com/bychi_seksualnye_vozbuditeli.html&gt;&aacute;&ucirc;&divide;&uuml;&egrave;<br/>&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring; &acirc;&icirc;&ccedil;&aacute;&oacute;&auml;&egrave;&ograve;&aring;&euml;&egrave;&lt;/a&gt;<br/>&lt;a href=http://uhvontsv.free-site-host.com/vtroem_seks_foto.html&gt;&acirc;&ograve;&eth;&icirc;&aring;&igrave;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a href=http://eaobabsh.free-site-host.com/poni_seks.html&gt;&iuml;&icirc;&iacute;&egrave; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://satwsvpn.free-site-host.com/tolstym_seks_foto.html&gt;&ograve;&icirc;&euml;&ntilde;&ograve;&ucirc;&igrave;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://txvfokfs.free-site-host.com/srochno_nujna_finansovaya_pomosc_seks.html&gt;&ntilde;&eth;&icirc;&divide;&iacute;&icirc;<br/>&iacute;&oacute;&aelig;&iacute;&agrave; &ocirc;&egrave;&iacute;&agrave;&iacute;&ntilde;&icirc;&acirc;&agrave;&yuml; &iuml;&icirc;&igrave;&icirc;&ugrave;&uuml; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://nudpztzq.free-site-host.com/oboi_seksualnye.html&gt;&icirc;&aacute;&icirc;&egrave;<br/>&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://giejvupu.free-site-host.com/hudojnstvennaya_literatura_na_temu_seksa.html&gt;&otilde;&oacute;&auml;&icirc;&aelig;&iacute;&ntilde;&ograve;&acirc;&aring;&iacute;&iacute;&agrave;&yuml;<br/>&euml;&egrave;&ograve;&aring;&eth;&agrave;&ograve;&oacute;&eth;&agrave; &iacute;&agrave; &ograve;&aring;&igrave;&oacute; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a href=http://gmgzpdkb.free-site-host.com/foto_seksa_15_detei.html&gt;&ocirc;&icirc;&ograve;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde;&agrave; 15 &auml;&aring;&ograve;&aring;&eacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://szroieig.free-site-host.com/prostitutki_chechenki_v_mire.html&gt;&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;<br/>&divide;&aring;&divide;&aring;&iacute;&ecirc;&egrave; &acirc; &igrave;&egrave;&eth;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://wnljgwil.free-site-host.com/mujchina_zanimaetsya_seksom_s_malyshom.html&gt;&igrave;&oacute;&aelig;&divide;&egrave;&iacute;&agrave;<br/>&ccedil;&agrave;&iacute;&egrave;&igrave;&agrave;&aring;&ograve;&ntilde;&yuml; &ntilde;&aring;&ecirc;&ntilde;&icirc;&igrave; &ntilde; &igrave;&agrave;&euml;&ucirc;&oslash;&icirc;&igrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://giejvupu.free-site-host.com/svyazannye_multiki_seks.html&gt;&ntilde;&acirc;&yuml;&ccedil;&agrave;&iacute;&iacute;&ucirc;&aring;<br/>&igrave;&oacute;&euml;&uuml;&ograve;&egrave;&ecirc;&egrave; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://jfqshxve.free-site-host.com/seks_skandaly.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ntilde;&ecirc;&agrave;&iacute;&auml;&agrave;&euml;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://ejalhqul.free-site-host.com/vozvrascenie_seks_vampira_porno.html&gt;&acirc;&icirc;&ccedil;&acirc;&eth;&agrave;&ugrave;&aring;&iacute;&egrave;&aring;<br/>&ntilde;&aring;&ecirc;&ntilde; &acirc;&agrave;&igrave;&iuml;&egrave;&eth;&agrave; &iuml;&icirc;&eth;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://szroieig.free-site-host.com/vetnamskie_prostitutki_v_moskve.html&gt;&acirc;&uuml;&aring;&ograve;&iacute;&agrave;&igrave;&ntilde;&ecirc;&egrave;&aring;<br/>&iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave; &acirc; &igrave;&icirc;&ntilde;&ecirc;&acirc;&aring;&lt;/a&gt;<br/>&lt;a<br/>href=http://nudpztzq.free-site-host.com/domashnii_seks_foto_semki.html&gt;&auml;&icirc;&igrave;&agrave;&oslash;&iacute;&egrave;&egrave;<br/>&ntilde;&aring;&ecirc;&ntilde; &ocirc;&icirc;&ograve;&icirc; &ntilde;&uuml;&aring;&igrave;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a href=http://tglzbqon.free-site-host.com/seks_vecherinki_kluby.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc;&aring;&divide;&aring;&eth;&egrave;&iacute;&ecirc;&egrave; &ecirc;&euml;&oacute;&aacute;&ucirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://uhvontsv.free-site-host.com/vse_o_sekse_porno_foto_porno_fotogalarei.html&gt;&acirc;&ntilde;&aring;<br/>&icirc; &ntilde;&aring;&ecirc;&ntilde;&aring; &iuml;&icirc;&eth;&iacute;&icirc; &ocirc;&icirc;&ograve;&icirc;. &iuml;&icirc;&eth;&iacute;&icirc; &ocirc;&icirc;&ograve;&icirc;&atilde;&agrave;&euml;&agrave;&eth;&aring;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://qfrhytpo.free-site-host.com/seks_foto_vysokogo_kachestva.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ocirc;&icirc;&ograve;&icirc; &acirc;&ucirc;&ntilde;&icirc;&ecirc;&icirc;&atilde;&icirc; &ecirc;&agrave;&divide;&aring;&ntilde;&ograve;&acirc;&agrave;&lt;/a&gt;<br/>&lt;a href=http://xtgbqcmo.free-site-host.com/map.html&gt;map&lt;/a&gt;<br/>&lt;a href=http://satwsvpn.free-site-host.com/www_seks_lezbiyanok_ru.html&gt;www<br/>&ntilde;&aring;&ecirc;&ntilde; &euml;&aring;&ccedil;&aacute;&egrave;&yuml;&iacute;&icirc;&ecirc; ru&lt;/a&gt;<br/>&lt;a<br/>href=http://bczcsumm.free-site-host.com/seksualnye_jenskie_stupni_nog.html&gt;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring;<br/>&aelig;&aring;&iacute;&ntilde;&ecirc;&egrave;&aring; &ntilde;&ograve;&oacute;&iuml;&iacute;&egrave; &iacute;&icirc;&atilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://bczcsumm.free-site-host.com/seksualnye_rekordy_ginesa.html&gt;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&aring;<br/>&eth;&aring;&ecirc;&icirc;&eth;&auml;&ucirc; &atilde;&egrave;&iacute;&aring;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a href=http://uhvontsv.free-site-host.com/video_erotika_seks.html&gt;&acirc;&egrave;&auml;&aring;&icirc;<br/>&yacute;&eth;&icirc;&ograve;&egrave;&ecirc;&agrave; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://yjvvngln.free-site-host.com/porno_galereya_oralnogo_seksa.html&gt;&iuml;&icirc;&eth;&iacute;&icirc;<br/>&atilde;&agrave;&euml;&aring;&eth;&aring;&yuml; &icirc;&eth;&agrave;&euml;&uuml;&iacute;&icirc;&atilde;&icirc; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a href=http://nudpztzq.free-site-host.com/orgiya_seks.html&gt;&icirc;&eth;&atilde;&egrave;&yuml; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://blodgtjl.free-site-host.com/dlya_gruppovogo_seksa.html&gt;&auml;&euml;&yuml;<br/>&atilde;&eth;&oacute;&iuml;&iuml;&icirc;&acirc;&icirc;&atilde;&icirc; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://qfrhytpo.free-site-host.com/seks_foto_zamujnie_jensciny.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ocirc;&icirc;&ograve;&icirc; &ccedil;&agrave;&igrave;&oacute;&aelig;&iacute;&egrave;&aring; &aelig;&aring;&iacute;&ugrave;&egrave;&iacute;&ucirc;&lt;/a&gt;<br/>&lt;a href=http://hjgqvusx.free-site-host.com/foto_seks_trans.html&gt;&ocirc;&icirc;&ograve;&icirc; &ntilde;&aring;&ecirc;&ntilde;<br/>&ograve;&eth;&agrave;&iacute;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://achrsjcz.free-site-host.com/video_seksa_berkovoi.html&gt;&acirc;&egrave;&auml;&aring;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde;&agrave; &aacute;&aring;&eth;&ecirc;&icirc;&acirc;&icirc;&eacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://giejvupu.free-site-host.com/seks_v_drugom_gorode_na_mtv.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&acirc; &auml;&eth;&oacute;&atilde;&icirc;&igrave; &atilde;&icirc;&eth;&icirc;&auml;&aring; &iacute;&agrave; mtv&lt;/a&gt;<br/>&lt;a<br/>href=http://xzvrlqrp.free-site-host.com/seks_mejdu_jivotnymi_besplatno.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&igrave;&aring;&aelig;&auml;&oacute; &aelig;&egrave;&acirc;&icirc;&ograve;&iacute;&ucirc;&igrave;&egrave; &aacute;&aring;&ntilde;&iuml;&euml;&agrave;&ograve;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a href=http://gbwmudll.free-site-host.com/3d_seks_besplatno.html&gt;3d &ntilde;&aring;&ecirc;&ntilde;<br/>&aacute;&aring;&ntilde;&iuml;&euml;&agrave;&ograve;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a href=http://syeujnpx.free-site-host.com/seks_s_detmi_skachat.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ntilde; &auml;&aring;&ograve;&uuml;&igrave;&egrave; &ntilde;&ecirc;&agrave;&divide;&agrave;&ograve;&uuml;&lt;/a&gt;<br/>&lt;a href=http://tglzbqon.free-site-host.com/seks_bom.html&gt;&ntilde;&aring;&ecirc;&ntilde; &aacute;&icirc;&igrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://yuatobgj.free-site-host.com/lidokain_sprei_dlya_seksa.html&gt;&euml;&egrave;&auml;&icirc;&ecirc;&agrave;&egrave;&iacute;<br/>&ntilde;&iuml;&eth;&aring;&eacute; &auml;&euml;&yuml; &ntilde;&aring;&ecirc;&ntilde;&agrave;&lt;/a&gt;<br/>&lt;a href=http://yvvgnupa.free-site-host.com/pro_seks_porno.html&gt;&iuml;&eth;&icirc; &ntilde;&aring;&ecirc;&ntilde;<br/>&iuml;&icirc;&eth;&iacute;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://dwkslknn.free-site-host.com/kakoi_seksshop_samyi_luchshii.html&gt;&ecirc;&agrave;&ecirc;&icirc;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde;&oslash;&icirc;&iuml; &ntilde;&agrave;&igrave;&ucirc;&eacute; &euml;&oacute;&divide;&oslash;&egrave;&eacute;&lt;/a&gt;<br/>&lt;a href=http://huwuntcx.free-site-host.com/maski_s_peryami_seks.html&gt;&igrave;&agrave;&ntilde;&ecirc;&egrave;<br/>&ntilde; &iuml;&aring;&eth;&uuml;&yuml;&igrave;&egrave; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a href=http://uswtdizi.free-site-host.com/seks_strogo_v_popu.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&ntilde;&ograve;&eth;&icirc;&atilde;&icirc; &acirc; &iuml;&icirc;&iuml;&oacute;&lt;/a&gt;<br/>&lt;a<br/>href=http://eaobabsh.free-site-host.com/povysit_seks_chuvstvitelnost.html&gt;&iuml;&icirc;&acirc;&ucirc;&ntilde;&egrave;&ograve;&uuml;<br/>&ntilde;&aring;&ecirc;&ntilde; &divide;&oacute;&acirc;&ntilde;&ograve;&acirc;&egrave;&ograve;&aring;&euml;&uuml;&iacute;&icirc;&ntilde;&ograve;&uuml;&lt;/a&gt;<br/>&lt;a href=http://qfrhytpo.free-site-host.com&gt;&ntilde;&aring;&ecirc;&ntilde; &ocirc;&agrave;&iacute;&ograve;&agrave;&ccedil;&egrave;&yuml; &ntilde;&agrave;&euml;&icirc;&iacute; &oacute;&ntilde;&euml;&oacute;&atilde;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://yvvgnupa.free-site-host.com/getero_seksualnyi_opyt.html&gt;&atilde;&aring;&ograve;&aring;&eth;&icirc;<br/>&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute; &icirc;&iuml;&ucirc;&ograve;&lt;/a&gt;<br/>&lt;a<br/>href=http://lfudigga.free-site-host.com/samye_deshevye_prostitutki.html&gt;&ntilde;&agrave;&igrave;&ucirc;&aring;<br/>&auml;&aring;&oslash;&aring;&acirc;&ucirc;&aring; &iuml;&eth;&icirc;&ntilde;&ograve;&egrave;&ograve;&oacute;&ograve;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://dxnzqdak.free-site-host.com/seksualnyi_tors_foto.html&gt;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&ucirc;&eacute;<br/>&ograve;&icirc;&eth;&ntilde; &ocirc;&icirc;&ograve;&icirc;&lt;/a&gt;<br/>&lt;a<br/>href=http://syeujnpx.free-site-host.com/seks_igrushki_dlya_devstvenic.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&egrave;&atilde;&eth;&oacute;&oslash;&ecirc;&egrave; &auml;&euml;&yuml; &auml;&aring;&acirc;&ntilde;&ograve;&acirc;&aring;&iacute;&egrave;&ouml;&lt;/a&gt;<br/>&lt;a href=http://syeujnpx.free-site-host.com/seks_na_domu_uglich.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&iacute;&agrave; &auml;&icirc;&igrave;&oacute; &oacute;&atilde;&euml;&egrave;&divide;&lt;/a&gt;<br/>&lt;a<br/>href=http://dxnzqdak.free-site-host.com/biseksualy_orgii_galerei.html&gt;&aacute;&egrave;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&ucirc;<br/>&icirc;&eth;&atilde;&egrave;&egrave; &atilde;&agrave;&euml;&aring;&eth;&aring;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://thohwilj.free-site-host.com/seks_c_malenkimi_devochkami.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>c &igrave;&agrave;&euml;&aring;&iacute;&uuml;&ecirc;&egrave;&igrave;&egrave; &auml;&aring;&acirc;&icirc;&divide;&ecirc;&agrave;&igrave;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://nxqqlrcu.free-site-host.com/seks_dosug_devushka_16let.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&auml;&icirc;&ntilde;&oacute;&atilde; &auml;&aring;&acirc;&oacute;&oslash;&ecirc;&agrave; 16&euml;&aring;&ograve;&lt;/a&gt;<br/>&lt;a<br/>href=http://dngpkrqd.free-site-host.com/seksualno_azabochennye_medsestra_lezbiyanki.html&gt;&ntilde;&aring;&ecirc;&ntilde;&oacute;&agrave;&euml;&uuml;&iacute;&icirc;<br/>&agrave;&ccedil;&agrave;&aacute;&icirc;&divide;&aring;&iacute;&iacute;&ucirc;&aring; &igrave;&aring;&auml;&ntilde;&aring;&ntilde;&ograve;&eth;&agrave; &euml;&aring;&ccedil;&aacute;&egrave;&yuml;&iacute;&ecirc;&egrave;&lt;/a&gt;<br/>&lt;a href=http://wodbqbzo.free-site-host.com/seks_na_dom.html&gt;&ntilde;&aring;&ecirc;&ntilde; &iacute;&agrave; &auml;&icirc;&igrave;&lt;/a&gt;<br/>&lt;a href=http://giejvupu.free-site-host.com/seks_vtroem_21.html&gt;&ntilde;&aring;&ecirc;&ntilde; &acirc;&ograve;&eth;&icirc;&aring;&igrave;<br/>2+1&lt;/a&gt;<br/>&lt;a href=http://hhtswqzd.free-site-host.com/lunka_com_porno_seks.html&gt;lunka<br/>com &iuml;&icirc;&eth;&iacute;&icirc; &ntilde;&aring;&ecirc;&ntilde;&lt;/a&gt;<br/>&lt;a<br/>href=http://gbdjaygl.free-site-host.com/nikto_ne_znaet_pro_seks_torrent.html&gt;&iacute;&egrave;&ecirc;&ograve;&icirc;<br/>&iacute;&aring; &ccedil;&iacute;&agrave;&aring;&ograve; &iuml;&eth;&icirc; &ntilde;&aring;&ecirc;&ntilde; torrent&lt;/a&gt;<br/>&lt;a href=http://xzvrlqrp.free-site-host.com/seks_mama_galerei.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&igrave;&agrave;&igrave;&agrave; &atilde;&agrave;&euml;&aring;&eth;&aring;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://guklpgcz.free-site-host.com/seks_eto_prosto_lubov_bez_formalnostei_bez_obmanchivosti_i_lji.html&gt;&ntilde;&aring;&ecirc;&ntilde;<br/>&yacute;&ograve;&icirc; &iuml;&eth;&icirc;&ntilde;&ograve;&icirc; &euml;&thorn;&aacute;&icirc;&acirc;&uuml; &aacute;&aring;&ccedil; &ocirc;&icirc;&eth;&igrave;&agrave;&euml;&uuml;&iacute;&icirc;&ntilde;&ograve;&aring;&eacute; &aacute;&aring;&ccedil; &icirc;&aacute;&igrave;&agrave;&iacute;&divide;&egrave;&acirc;&icirc;&ntilde;&ograve;&egrave; &egrave; &euml;&aelig;&egrave;&lt;/a&gt;<br/>&lt;a<br/>href=http://uouklcym.free-site-host.com/tantricheskii_seks_stati.html&gt;&ograve;&agrave;&iacute;&ograve;&eth;&egrave;&divide;&aring;&ntilde;&ecirc;&egrave;&eacute;<br/>&ntilde;&aring;&ecirc;&ntilde; &ntilde;&ograve;&agrave;&ograve;&uuml;&egrave;&lt;/a&gt;<br/> <br/>G&#39;night<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2008/06/msg525.html Thu, 19 Jun 2008 10:11:03 +0000 Best way to save text for deferred parsing by Peter Scott I want to parse input but when I&#39;m in a particular top-level rule, save<br/>the text that was parsed instead of executing the actions, to do so<br/>instead later. I&#39;ve got a solution but I&#39;d like a sanity check.<br/><br/>I can explain it in terms of some adventure game commands. (That&#39;s not my<br/>application, but it&#39;s exactly equivalent and more entertaining. I cut my<br/>gaming teeth on VAX/VMS DUNGEON and it&#39;s colored my thinking ever since.)<br/>So I want to be able to &quot;Kill troll with axe&quot;, and &quot;Open window&quot;, but<br/>also, &quot;Tell robot open door&quot; where there is a subset of commands I can<br/>execute that the robot can also execute.<br/><br/>So for a &quot;tell &lt;actor&gt; &lt;command&gt;&quot; statement I want to save &lt;command&gt; and<br/>pass that text to the action for &#39;tell&#39; where it decides what to do with<br/>it (maybe setting the global actor and then calling the parser again). I<br/>found Parse::RecDecent::Consumer and came up with the below, which does<br/>what I want, but I thought I&#39;d ask here for comments on improving it. <br/>I want to minimize the impact upon the grammar for executing regular<br/>commands caused by having to be able to handle them as delegated commands<br/>also.<br/><br/>#!/usr/local/bin/perl<br/>use strict;<br/>use warnings;<br/><br/>use Parse::RecDescent;<br/>use Parse::RecDescent::Consumer &#39;Consumer&#39;;<br/><br/># $::RD_TRACE = 1;<br/>my $parser = Parse::RecDescent-&gt;new(join &#39;&#39;, &lt;DATA&gt;);<br/><br/>for ( &#39;open window&#39;,<br/> &#39;kill troll with sword&#39;,<br/> &#39;tell robot kill thief with knife&#39;,<br/> &#39;tell troll drop sack&#39;,<br/> &#39;tell thief open door&#39; )<br/>{<br/> print &quot;$_ : &quot;;<br/> defined $parser-&gt;start($_) or print &quot;Error\n&quot;;<br/>}<br/><br/>sub Parse::RecDescent::do_open { print &quot;OPEN(@_)\n&quot;; }<br/><br/>sub Parse::RecDescent::do_drop { print &quot;DROP(@_)\n&quot;; }<br/><br/>sub Parse::RecDescent::do_attack<br/>{<br/> my @args = map { ref $_ ? @$_ : $_ } @_;<br/> print &quot;KILL(&quot;, join (&#39;, &#39;, @args), &quot;)\n&quot;;<br/>}<br/><br/>sub Parse::RecDescent::do_tell<br/>{<br/> print &quot;TELL($_[0] =&gt; &#39;$_[1]&#39;)\n&quot;<br/>}<br/><br/>__END__<br/><br/>{ $::SAVING = 0 }<br/><br/>start : tell | immediate<br/><br/>tell : &#39;tell&#39; actor slave_command<br/> { do_tell($item{actor}, $item{slave_command}); $::SAVING = 1 }<br/><br/>immediate: ( slave_command | master_command ) { $::SAVING = 0 }<br/><br/>slave_command : &lt;rulevar: $C&gt;<br/>slave_command : { $C = Consumer($text) ; 1}<br/> (drop | attack)<br/> { $C-&gt;($text); }<br/><br/>master_command : open # Only I can open stuff<br/><br/>actor : &#39;robot&#39; | &#39;thief&#39; | &#39;troll&#39;<br/><br/>drop : &#39;drop&#39; object<br/> &lt;defer: do_drop($item[2]) unless $::SAVING &gt;<br/><br/>object : &#39;sack&#39; | &#39;bottle&#39; | weapon<br/><br/>attack : &#39;kill&#39; actor (&#39;with&#39; weapon)(?)<br/> &lt;defer: do_attack(@item[2,3]) unless $::SAVING &gt;<br/><br/>weapon : &#39;knife&#39; | &#39;sword&#39;<br/><br/>open : &#39;open&#39; orifice<br/> &lt;defer: do_open($item[2]) unless $::SAVING &gt;<br/><br/>orifice : &#39;door&#39; | &#39;window&#39;<br/><br/><br/>$ ./telltest<br/>open window : OPEN(window)<br/>kill troll with sword : KILL(troll, sword)<br/>tell robot kill thief with knife : TELL(robot =&gt; &#39; kill thief with knife&#39;)<br/>tell troll drop sack : TELL(troll =&gt; &#39; drop sack&#39;)<br/>tell thief open door : Error<br/><br/><br/>-- <br/>Peter Scott<br/>http://www.perlmedic.com/<br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2008/02/msg524.html Wed, 06 Feb 2008 10:53:32 +0000 Re: recdescent GMANE feed available by Terrence Brannon &lt;terrence.x.brannon@...&gt; writes:<br/><br/>&gt; <br/>&gt; http://gmane.org/info.php?group=gmane.comp.lang.perl.modules.parse-recdescent<br/><br/>test post from http://post.gmane.org/post.php?<br/>group=gmane.comp.lang.perl.modules.parse-recdescent&amp;followup=1<br/><br/><br/><br/> http://www.nntp.perl.org/group/perl.recdescent/2007/11/msg523.html Thu, 15 Nov 2007 13:21:02 +0000