help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: how to use parsing expressing grammar


From: ashishnkadakia
Subject: Re: how to use parsing expressing grammar
Date: Tue, 23 Dec 2008 15:21:07 -0800 (PST)
User-agent: G2/1.0

Sorry for the pointer to different language here.

If it doesn't matter which language you want to use, use Perl.
It has decent parsing modules, that can do job wonderfully.


On Dec 20, 3:42 am, Xah Lee <xah...@gmail.com> wrote:
> more questions on parsing expression grammar.
>
> let's say i want to change tags of the form
>
> “<img src="archimedesspiral.png">”
>
> into
>
> “<img src="★">”
>
> I tried the following:
>
> (defun doMyReplace ()
> (interactive)
>   (peg-parse
>    (start imgTag)
>   (imgTag "<img" whitespace "src=" "\"" (replace filePath "★") "\""
> ">")
>   (whitespace [" "])
>   (filePath [a-z "."])
>    )
> )
>
> then placed my cursor at the beginning of the tag, then call
> doMyReplace. It doesn't seems to work, except moving cursor to after
> the “a”.
>
> I spent about 20 min but couldn't see what's wrong with my code?
>
> ----------------
>
> in general, i wanted to use PEG to do transformation from html 4
> transitional to html 4 strict. I have maybe 3 hundred files to do
> this. One of the primary change from html 4 trans to html 4 strict is
> that any image tag now needs to be wrapped with “div”.
>
> So basically,
>
> <img ...>
>
> needs to become
>
> <div><img ...></div>
>
> The first job i tried to do to as a simplification, is to try to write
> a img tag matcher to test with. here's my code:
>
> (defun doMyReplace ()
> (interactive)
>   (peg-parse
>   (imgTag "<img" whitespace
>  "src=" "\"" filePath "\"" whitespace
>  "alt=" "\"" (replace altStr "★") "\"" whitespace
>  "height=" "\"" digits "\"" whitespace
>  "width=" "\"" digits "\""
>  ">")
>   (whitespace ["\n "])
>   (digits [0-9])
>   (filePath [A-Z a-z "./_"])
>   (altStr [A-Z a-z "./ '"])
>    )
> )
>
> but then couldn't get it to work.
>
> Any help appreciated.
>
> Btw, would you be interested in starting a mailing list on PEG in
> emacs? e.g. yasnippet has one thru google, nxml has one in yahoo
> group, ljupdate has one in livejournal. I think it'd be helpful.
>
>   Xah
>http://xahlee.org/
>
>
>
> On Dec 19, 3:27 pm, Xah Lee <xah...@gmail.com> wrote:
>
> > On Dec 17, 10:22 am, Helmut Eller <eller.hel...@gmail.com> wrote:
>
> > > * Helmut Eller [2008-12-17 16:21+0100] writes:
>
> > > > Recording positions in this manner is obviously tedious and it just
> > > > shows that the package hasn't received much battle testing.  As a little
> > > > improvement we could define a custom "region" operator which acts
> > > > similarly as the *list operator, but instead of collecting a list we
> > > > push the start and end positions.  E.g.:
>
> > > I released a new version of peg.el and added a replace operator.
> > > We can now match and replace without helper function:
>
> > > (defun parse3 ()
> > >   (peg-parse
> > >    (start _ "<hr>" _ title _ ul)
> > >    (title "<p>" (replace (* (not "</p>") (any)) "See also:") "</p>")
> > >    (ul (replace "<ul>" "<p>") _ (*list li _) (replace "</ul>" "</p>"))
> > >    (li (replace "<li>" "") (* (not "</li>") (any)) (replace "</li>" 
> > > "<br>"))
> > >    (_ (* (or whitespace comment)))
> > >    (whitespace ["\n\t "])
> > >    (comment "<-- " (* (not "-->") (any)) "-->")))
>
> > > Helmut.
>
> > Holy cow. This worked! LOL!
>
> > Thanks!
>
> >   Xah
> > ∑http://xahlee.org/
>
> > ☄



reply via email to

[Prev in Thread] Current Thread [Next in Thread]