Thread: [Pyparsing] White space
Brought to you by:
ptmcg
From: cathal c. <cof...@gm...> - 2011-06-21 22:35:16
|
Hello, I have a quick question. Shouldn't the below grammar accept the given string? from pyparsing import Word, alphas g = "$" + "as" + Word(alphas) g.parseString('$ as abc') ParseException: Expected "$as" (at char 0), (line:1, col:1) I want the grammar to accept $ followed by: any number of spaces followed by: as followed by: any number of spaces followed by: any string of characters. The reason I am confused is that the following grammar accepts regardless of white space... why doesn't the above? g = "as" + Word(alphas) g.parseString(' as abc ') Out: (['as', 'abc'], {}) Kind regards, Cathal |
From: Paul M. <pt...@au...> - 2011-06-22 00:16:50
|
Here's your definition of g >>> g = "$" + "as" + Word(alphas) >>> print g {"$as" W:(abcd...)} "$" + "as" gets interpreted by Python as the addition of two strings, resulting in "$as". Force the leading "$" to be a pyparsing Literal, and then you'll get a better parser: >>> g = Literal("$") + "as" + Word(alphas) >>> print g {{"$" "as"} W:(abcd...)} -- Paul -----Original Message----- From: cathal coffey [mailto:cof...@gm...] Sent: Tuesday, June 21, 2011 5:35 PM To: pyp...@li... Subject: [Pyparsing] White space Hello, I have a quick question. Shouldn't the below grammar accept the given string? from pyparsing import Word, alphas g = "$" + "as" + Word(alphas) g.parseString('$ as abc') ParseException: Expected "$as" (at char 0), (line:1, col:1) I want the grammar to accept $ followed by: any number of spaces followed by: as followed by: any number of spaces followed by: any string of characters. The reason I am confused is that the following grammar accepts regardless of white space... why doesn't the above? g = "as" + Word(alphas) g.parseString(' as abc ') Out: (['as', 'abc'], {}) Kind regards, Cathal ---------------------------------------------------------------------------- -- EditLive Enterprise is the world's most technically advanced content authoring tool. Experience the power of Track Changes, Inline Image Editing and ensure content is compliant with Accessibility Checking. http://p.sf.net/sfu/ephox-dev2dev _______________________________________________ Pyparsing-users mailing list Pyp...@li... https://lists.sourceforge.net/lists/listinfo/pyparsing-users |
From: Eike W. <eik...@gm...> - 2011-06-22 00:24:22
|
Hello Cathal! I'm trying to answer your question without testing anything. So it might be completely wrong. On Wednesday 22.06.2011 00:34:49 cathal coffey wrote: > Hello, > > I have a quick question. Shouldn't the below grammar accept the given > string? > > from pyparsing import Word, alphas > g = "$" + "as" + Word(alphas) > g.parseString('$ as abc') > ParseException: Expected "$as" (at char 0), (line:1, col:1) It the order with which the ``+`` operators are applied in the first statement, that fools you. The left ``+`` operator is applied first so that two strings are added:: "$" + "as" Therefor your first statement is equivalent to:: g = "$as" + Word(alphas) You get the desired result with:: g = Literal("$") + "as" + Word(alphas) Look also at ``Keyword``. You probably want:: from pyparsing import Word, alphas, Keyword Kw = Keyword g = "$" + Kw("as") + Word(alphas) The string ``"$"`` is now implicitly converted to ``Literal("$")`` because to apply the left ``+`` operator, Python calls the method ``Keyword.__radd__``. This method converts strings to literals. For the behavior of Python's operators look at the official (but somewhat cryptic) explanation: http://docs.python.org/reference/datamodel.html#emulating-numeric-types > > I want the grammar to accept $ followed by: any number of spaces > followed by: as followed by: any number of spaces followed by: any > string of characters. HTH, Eike. |
From: Paul M. <pt...@au...> - 2011-06-22 00:56:11
|
Eike - Good point! It isn't necessary to make '$' the Literal expression, it is just as good (and if using Keyword, probably more appropriate) to make 'as' the expression using the Keyword class. -- Paul -----Original Message----- From: Eike Welk [mailto:eik...@gm...] Sent: Tuesday, June 21, 2011 7:24 PM To: pyp...@li... Subject: Re: [Pyparsing] White space Hello Cathal! I'm trying to answer your question without testing anything. So it might be completely wrong. On Wednesday 22.06.2011 00:34:49 cathal coffey wrote: > Hello, > > I have a quick question. Shouldn't the below grammar accept the given > string? > > from pyparsing import Word, alphas > g = "$" + "as" + Word(alphas) > g.parseString('$ as abc') > ParseException: Expected "$as" (at char 0), (line:1, col:1) It the order with which the ``+`` operators are applied in the first statement, that fools you. The left ``+`` operator is applied first so that two strings are added:: "$" + "as" Therefor your first statement is equivalent to:: g = "$as" + Word(alphas) You get the desired result with:: g = Literal("$") + "as" + Word(alphas) Look also at ``Keyword``. You probably want:: from pyparsing import Word, alphas, Keyword Kw = Keyword g = "$" + Kw("as") + Word(alphas) The string ``"$"`` is now implicitly converted to ``Literal("$")`` because to apply the left ``+`` operator, Python calls the method ``Keyword.__radd__``. This method converts strings to literals. For the behavior of Python's operators look at the official (but somewhat cryptic) explanation: http://docs.python.org/reference/datamodel.html#emulating-numeric-types > > I want the grammar to accept $ followed by: any number of spaces > followed by: as followed by: any number of spaces followed by: any > string of characters. HTH, Eike. ---------------------------------------------------------------------------- -- EditLive Enterprise is the world's most technically advanced content authoring tool. Experience the power of Track Changes, Inline Image Editing and ensure content is compliant with Accessibility Checking. http://p.sf.net/sfu/ephox-dev2dev _______________________________________________ Pyparsing-users mailing list Pyp...@li... https://lists.sourceforge.net/lists/listinfo/pyparsing-users |
From: Ralph C. <ra...@in...> - 2011-06-22 10:49:44
|
Hi, Paul McGuire wrote: > > from pyparsing import Word, alphas > > g = "$" + "as" + Word(alphas) > > g.parseString('$ as abc') > > ParseException: Expected "$as" (at char 0), (line:1, col:1) > > Here's your definition of g > >>> g = "$" + "as" + Word(alphas) > >>> print g > {"$as" W:(abcd...)} > > "$" + "as" gets interpreted by Python as the addition of two strings, > resulting in "$as". I guess yet another way, keyword issue aside, is to alter the associativity with parenthesis? >>> g = "$" + ("as" + Word(alphas)) >>> print g {"$" {"as" W:(abcd...)}} >>> g.parseString('$ as abc') (['$', 'as', 'abc'], {}) >>> Cheers, Ralph. |