[DGD] Parse_string question

Noah Lee Gibbs angelbob at monkeyspeak.com
Wed Feb 13 09:42:11 CET 2002


  I tried your trick of just using a different regular expression.  It's
not perfect yet (my fault, I imagine) but it's parsing the backslash-brace
things as just strings which is a massive improvement.  Looks like I'll
have it all working soon.
  Thanks!

-- 
angelbob at monkeyspeak.com
See my page of DGD documentation at
"http://www.angelbob.com/projects/DGD_Page.html"
If you post to the DGD list, you may see yourself there!

On Tue, 12 Feb 2002, S. Foley wrote:

> 
> Your grammar was:
> 
> Noah Lee Gibbs <angelbob at monkeyspeak.com> wrote:
> >regularstring = /[^~{}\\]*/
> >
> >unq_document: unq_string
> >
> >substring: regularstring
> >substring: regularstring '\\' '{' ? concat_string_char
> >substring: regularstring '\\' '}' ? concat_string_char
> >substring: regularstring '\\' '~' ? concat_string_char
> >substring: regularstring '\\' '\\' ? concat_string_char
> >substring: substring regularstring ? concat_strings
> >
> >unq_tag: '{' substring '}' ? anon_tag
> >unq_tag: '~' regularstring '{' substring '}' ? named_tag
> >unq_tag: '{' unq_string '}' ? anon_tag
> >unq_tag: '~' regularstring '{' unq_string '}' ? named_tag
> >
> >unq_string: substring ? simple_anon_tag
> >unq_string: unq_tag
> >unq_string: unq_string substring ? concat_ustring_string
> >unq_string: unq_string unq_tag
> 
> I'll help as much as I can.  First off, the source of your ambiguity with 
> respect to the input string given.  You have the following 3 production 
> rules:
> 
> a) unq_string: substring ? simple_anon_tag
> b) unq_tag: '~' regular_string '{' substring '}' ? named_tag
> c) unq_tag: '~' regularstring '{' unq_string '}' ? named_tag
> 
> The ambiguity exists because you can get to b either by using b, or using c 
> in conjuction with a.  The solution might be to get rid of production rule 
> b.  It's hard to say without knowing what the lpc functions are doing.
> 
> Another ambiguity:
> 
> a) unq_tag: '{' substring '}' ? anon_tag
> b) unq_tag: '{' unq_string '}' ? anon_tag
> c) unq_string: substring ? simple_anon_tag
> 
> You can get to a also by application of b and c.  The solution here might be 
> to eliminate production rule a, though again you might not be able to do 
> that and still craft the array in the manner you want.  Again, hard to know 
> without knowing how you want the return array crafted.
> 
> I think you can get around your token problem by just writing a better 
> regular expression.  The one I came up with is:
> 
> regularstring = /((\\\\{)|(\\\\})|(\\\\~)|(\\\\\\\\)|([^~{}\\\\]))*/
> 
> I'm not sure this suits your purposes, as I'm not 100% sure what you 
> intended the concat_string_char function to do, though I have a good guess.  
> I wrote up a quick grammar for this, but I'm not sure if this suits your 
> purposes.  I suspect tacking on functions in the appropriate production 
> rules might get you where you want to go... but maybe not.  Again, I'm not 
> certain about how you wanted to craft the return array.  Anyway, it can't 
> hurt to offer one up to you.
> 
> regularstring = /((\\\\{)|(\\\\})|(\\\\~)|(\\\\\\\\)|([^~{}\\\\]))*/
> 
> unq_document: unq_string
> unq_tag: '{' unq_string '}'
> unq_tag: '~' regularstring '{' unq_string '}'
> unq_string: regularstring
> unq_string: unq_tag
> unq_string: unq_string regularstring
> unq_string: unq_string unq_tag
> 
> The rewritten regexp gets rid of the need to concatenate strings via lpc 
> functions.  Eliminating the production rules mentioned above seemed to get 
> rid of the ambiguity, at least with respect to the test string you gave.
> 
> I'm not sure this helps at all, but I figured it was worth a shot.
> 
> Good luck.  Maybe someone else on the list will help you further along than 
> I can.  Perhaps if you give greater detail concerning what these LPC 
> functions are doing, a sample input string, and the exact return value you'd 
> like to see for that input string, I (or, better yet, someone a little 
> smarter) could help you better.
> 
> --Steve
> 
> _________________________________________________________________
> MSN Photos is the easiest way to share and print your photos: 
> http://photos.msn.com/support/worldwide.aspx
> 
> _________________________________________________________________
> List config page:  http://list.imaginary.com/mailman/listinfo/dgd
> 

_________________________________________________________________
List config page:  http://list.imaginary.com/mailman/listinfo/dgd



More information about the DGD mailing list