Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Re: Re: Re: Re: Re: parsing an ASP file

by Juerd (Abbot)
on May 25, 2004 at 21:34 UTC ( [id://356387]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Re: Re: Re: parsing an ASP file
in thread parsing an ASP file

/\G((?: [^<]+ | <(?!%) )*) (?: <%(.*?)%> | ((?=<%)) )?/gsx

Just for fun, I wanted to try to make a Perl 6 rule from this. Here it is, untested and mostly guessed. I have no idea how to do line numbers, so I cheated and imagined a method of .pos for that :)

rule code_begin ($type) { <{ { asp => '<%', php => '<?', plp => '<:' }.{$type} // fail "Unknown type: $type" }> } rule code_end ($type) { <{ { asp => '%>', php => '?>', plp => ':>' }.{$type} // fail "Unknown type: $type" }> } rule code_block ($type) { <code_begin $type> (.*?) <code_end $type> } rule code_document ($type) { [ # First, match any number of subsequent code blocks. [ { $?line := .pos.line } <code_block $type> :: { push @?blocks, [ $?line, code => $?code_block ] } ]* # If there is now a code_begin, obviously that is an open bloc +k. # (In PLP, that is valid, but let's assume for now that it's n +ot.) [ { $?line := .pos.line } <code_begin $type> \n* $?context := (\N<,15>) { fail "Unclosed code block on line $?line, near '$?contex +t'" } ]? # And then a piece of text. # (At least one character, to avoid having empty blocks.) [ { $?line := .pos.line } $?html := (.+?) [ <before <code_begin $type>> | $ ] :: { push @?blocks, [ $?line, html => $?html ] } ]? ]* } my @parsed = ($asp ~~ /<code_document 'asp'>/).{blocks}

Juerd # { site => 'juerd.nl', plp_site => 'plp.juerd.nl', do_not_use => 'spamtrap' }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://356387]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2024-04-19 05:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found