pyparsing-users Mailing List for Python parsing module
Brought to you by:
ptmcg
You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
(2) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(2) |
Feb
|
Mar
(2) |
Apr
(12) |
May
(2) |
Jun
|
Jul
|
Aug
(12) |
Sep
|
Oct
(1) |
Nov
|
Dec
|
2006 |
Jan
(5) |
Feb
(1) |
Mar
(10) |
Apr
(3) |
May
(7) |
Jun
(2) |
Jul
(2) |
Aug
(7) |
Sep
(8) |
Oct
(17) |
Nov
|
Dec
(3) |
2007 |
Jan
(4) |
Feb
|
Mar
(10) |
Apr
|
May
(6) |
Jun
(11) |
Jul
(1) |
Aug
|
Sep
(19) |
Oct
(8) |
Nov
(32) |
Dec
(8) |
2008 |
Jan
(12) |
Feb
(6) |
Mar
(42) |
Apr
(47) |
May
(17) |
Jun
(15) |
Jul
(7) |
Aug
(2) |
Sep
(13) |
Oct
(6) |
Nov
(11) |
Dec
(3) |
2009 |
Jan
(2) |
Feb
(3) |
Mar
|
Apr
|
May
(11) |
Jun
(13) |
Jul
(19) |
Aug
(17) |
Sep
(8) |
Oct
(3) |
Nov
(7) |
Dec
(1) |
2010 |
Jan
(2) |
Feb
|
Mar
(19) |
Apr
(6) |
May
|
Jun
(2) |
Jul
|
Aug
(1) |
Sep
|
Oct
(4) |
Nov
(3) |
Dec
(2) |
2011 |
Jan
(4) |
Feb
|
Mar
(5) |
Apr
(1) |
May
(3) |
Jun
(8) |
Jul
(6) |
Aug
(8) |
Sep
(35) |
Oct
(1) |
Nov
(1) |
Dec
(2) |
2012 |
Jan
(2) |
Feb
|
Mar
(3) |
Apr
(4) |
May
|
Jun
(1) |
Jul
|
Aug
(6) |
Sep
(18) |
Oct
|
Nov
(1) |
Dec
|
2013 |
Jan
(7) |
Feb
(7) |
Mar
(1) |
Apr
(4) |
May
|
Jun
|
Jul
(1) |
Aug
(5) |
Sep
(3) |
Oct
(11) |
Nov
(3) |
Dec
|
2014 |
Jan
(3) |
Feb
(1) |
Mar
|
Apr
(6) |
May
(10) |
Jun
(4) |
Jul
|
Aug
(5) |
Sep
(2) |
Oct
(4) |
Nov
(1) |
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
(13) |
May
(1) |
Jun
|
Jul
(2) |
Aug
|
Sep
(9) |
Oct
(2) |
Nov
(11) |
Dec
(2) |
2016 |
Jan
|
Feb
(3) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
(4) |
2017 |
Jan
(2) |
Feb
(2) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
(4) |
Aug
|
Sep
|
Oct
(4) |
Nov
(3) |
Dec
|
2018 |
Jan
(10) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2023 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2024 |
Jan
|
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
|
From: Mr. Mohammed<pr...@if...> - 2024-08-14 18:59:50
|
Greetings From Atlas, We the ATLAS GROUP HOLDING CORK CITY IRELAND invite you to partner with us and benefit from our new Loan and Partnership Project funding program. We offer loans and funding for various good projects Do you have any projects that need funding? We are ready to give you a Loan and a big loan at just 2% per annum for 15 years If you’re interested in any of our proposals send me your Mobile phone number so that I can write you and give you more details on our Loan Investment Funding Plan Regards Mr. Mohammed Hamza. ATLAS GROUP HOLDING CORK CITY IRELAND |
From: nursing 5.8 <co...@sc...> - 2024-08-05 20:22:43
|
International Journal of Nursing and Health Care Research ISSN: 2688-9501, Journal Impact Factor: 4.49, Volume 07 Dear Doctor, Greetings, we contacted you earlier but unfortunately, we did not receive any response from your end hoping that our mail may not reach you. We would like to invite you to submit a manuscript for publication in the upcoming issue of our journal. Please let us know your possibility as your submission will reflect the quality of our journal. we accept various types of articles, research, reviews, case reports, editorials, letters, perspectives, Short Communications and more. Including the COVID-related articles as well. Please attach your manuscript to this email or provide your preferred manuscript submission date. For Online Manuscript submission please find the given link and submit it. Online Manuscript Submission Link: Click Here [https://mail.sciarticles.biz/mautic/r/3e6b63ca4adeba2bf08b118c2?ct=YTo1OntzOjY6InNvdXJjZSI7YToyOntpOjA7czoxNDoiY2FtcGFpZ24uZXZlbnQiO2k6MTtpOjM7fXM6NToiZW1haWwiO2k6MjtzOjQ6InN0YXQiO3M6MjI6IjY2YjBjMjI0MGE2NzQzODM4MTM0OTgiO3M6NDoibGVhZCI7czo2OiIyMTc5OTUiO3M6NzoiY2hhbm5lbCI7YToxOntzOjU6ImVtYWlsIjtpOjI7fX0%3D&] NOTE: Article Publication or processing fee will be charged which varies from country to country; we will not publish for free of cost. We are looking forward to a long and productive relationship with you. I will be waiting for your positive mail. With regards, Julia Quinn Editorial Coordinator DOI, Google Scholar, Scopus, PubMed Indexed (NIH Funded) SCI Indexed, Index Copernicus, Web of Science International Journal of Nursing and Health Care Research. Unsubscribe to no longer receive emails from us. | Having trouble reading this email? Click here. |
From: nursing2.8 <jul...@ar...> - 2024-08-03 01:51:51
|
International Journal of Nursing and Health Care Research ISSN: 2688-9501, Journal Impact Factor: 4.49, Volume: 07 Dear Doctor, I hope this message finds you well. We recently invited you to submit your manuscript to International Journal of Nursing and Health Care Research. This is a friendly reminder of our upcoming issue. Your insights and research would be a valuable addition to our journal. If your manuscript is ready for publication, please submit it as an attachment to this email. For online submissions please find the below link. Online Manuscript Submission Link: Click Here [https://mail.artpublication.org/mautic/r/962412810801b4ef01438ede8?ct=YTo1OntzOjY6InNvdXJjZSI7YToyOntpOjA7czoxNDoiY2FtcGFpZ24uZXZlbnQiO2k6MTtpOjMwO31zOjU6ImVtYWlsIjtpOjMwO3M6NDoic3RhdCI7czoyMjoiNjZhYzc4YTAyYjU4MDc1NzY3MDYzNyI7czo0OiJsZWFkIjtzOjc6IjIwODA2MjYiO3M6NzoiY2hhbm5lbCI7YToxOntzOjU6ImVtYWlsIjtpOjMwO319&] We eagerly anticipate your contribution. Thank you for considering this opportunity. NOTE: Article Publication or processing fee will be charged which varies from country to country; we will not publish for free of cost. Best regards, Julia Quinn Editorial Coordinator DOI, Google Scholar, Scopus, PubMed Indexed (NIH Funded) SCI Indexed, Index Copernicus, Web of Science International Journal of Nursing and Health Care Research. Unsubscribe to no longer receive emails from us. | Having trouble reading this email? Click here. |
From: Nursing 18-7-24 <co...@sc...> - 2024-07-19 00:02:16
|
International Journal of Nursing and Health Care Research ISSN: 2688-9501, Journal Impact Factor: 4.49, Volume: 07 Dear Doctor, I hope this message finds you well. We recently invited you to submit your manuscript to International Journal of Nursing and Health Care Research. This is a friendly reminder of our upcoming issue. Your insights and research would be a valuable addition to our journal. If your manuscript is ready for publication, please submit it as an attachment to this email. Online Manuscript Submission Link: Click Here [https://mail.sciarticles.biz/mautic/r/ea9e55daf71f0128a0a45cab4?ct=YTo1OntzOjY6InNvdXJjZSI7YToyOntpOjA7czoxNDoiY2FtcGFpZ24uZXZlbnQiO2k6MTtpOjY5O31zOjU6ImVtYWlsIjtpOjY5O3M6NDoic3RhdCI7czoyMjoiNjY5OTU0MmJhZmQzNjEzMzM3NzAxOCI7czo0OiJsZWFkIjtzOjc6IjMzNDM4MzMiO3M6NzoiY2hhbm5lbCI7YToxOntzOjU6ImVtYWlsIjtpOjY5O319&] We eagerly anticipate your contribution. Thank you for considering this opportunity. Best regards, Julia Quinn Editorial Coordinator Gavin Publishers ISSN: 2688-9501, Journal Impact Factor: 4.49, Scopus impact factor: 1.05 PubMed Indexed (NIH Funded), Google Scholar, SCI Indexed, Index Copernicus International Journal of Nursing and Health Care Research. Unsubscribe to no longer receive emails from us. | Having trouble reading this email? Click here. |
From: hannah <ha...@in...> - 2024-04-05 11:56:46
|
International Journal of Nursing and Health Care Research ISSN: 2688-9501, Impact Factor: 4.49* PubMed Indexed (NIH Funded), Scopus, SCI Indexed, Index Copernicus, etc. Dear Doctor, Greetings, We contacted you earlier but unfortunately, we did not receive any response from your end hoping that our mail may not reach you. We would like to invite you to submit a manuscript for publication in the upcoming issue of our journal. Please let us know your possibility as your submission will reflect the quality of our journal. We accept various types of articles, including research, reviews, case reports, short communications, assignments, dissertations, editorials, letters to the editor, perspectives, mini-reviews, commentaries, opinions, image articles, book reviews, and video articles. We are looking forward to a long and productive relationship with you. I will be waiting for your positive mail. With regards, On Behalf of Julia Quinn What's App Number: +61 399177417 International Journal of Nursing and Health Care Research Editorial Coordinator. |
From: <pt...@au...> - 2019-06-18 14:00:18
|
You just did, but this list doesn't get much traffic lately, since pyparsing has moved to GitHub. Skim through the posted issues and the wiki for help. Also, the documentation page on the Wiki will link to the readthedocs page for online pyparsing doc. There is also a new pyparsing subreddit (https://www.reddit.com/r/pyparsing/ [1]), which would be a great place to post pyparsing questions, clever projects, etc. -- Paul -----------------------------------------From: "Heaton Xing" To: pyp...@li... Cc: Sent: Monday June 17 2019 8:52:38PM Subject: [Pyparsing] How to join this email group? TKS~ How to join this email group? TKS~ _______________________________________________ Pyparsing-users mailing list Pyp...@li... Links: ------ [1] https://www.reddit.com/r/pyparsing/ |
From: Heaton X. <hea...@gm...> - 2019-06-18 01:52:58
|
How to join this email group? TKS~ |
From: Paul M. <pt...@au...> - 2018-10-04 22:32:43
|
Robin - If you are stepping through pyparsing code, I suggest you call expr.streamline() (which collapses down structures like And([And([exprA, exprB]), exprC]) to And([exprA, exprB, exprC]) ) before calling expr.parseString(). You can also try using expr.runTests("test string to be parsed"), which should give a clearer picture of how things are behaving. If you are using parse actions, try decorating them with the pyparsing traceParseAction decorator, which will show you the tokens going in and the return value coming out. -- Paul -----Original Message----- From: Robin Siebler <ml...@ds...> Sent: Thursday, October 4, 2018 4:45 PM To: pyp...@li... Subject: [Pyparsing] Debugging I have a class I created to parse output from a command-line tool with variable output. It used to work, but the output of the tool has changed and...I've gotten really rusty using PyParsing. Is there a good way to step through my code and see what is going on while expressions are being evaluated? I'm using PyCharm. I tried stepping through line-by-line but...I don't really know what I'm looking for and I kept seeing a lot of code with the word 'streamline' in it. _______________________________________________ Pyparsing-users mailing list Pyp...@li... https://lists.sourceforge.net/lists/listinfo/pyparsing-users --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus |
From: Robin S. <ml...@ds...> - 2018-10-04 22:09:48
|
I have a class I created to parse output from a command-line tool with variable output. It used to work, but the output of the tool has changed and...I've gotten really rusty using PyParsing. Is there a good way to step through my code and see what is going on while expressions are being evaluated? I'm using PyCharm. I tried stepping through line-by-line but...I don't really know what I'm looking for and I kept seeing a lot of code with the word 'streamline' in it. |
From: Ralph C. <ra...@in...> - 2018-01-22 12:24:19
|
Hi, > hs_decimal = pp.Regex(r"-?[\d_]+(\.[\d_]+)?([eE][+\-]?[\d_]+)?") I think this matches _ ___ -_ _._ _E_ and so on. -- Cheers, Ralph. https://plus.google.com/+RalphCorderoy |
From: Ralph C. <ra...@in...> - 2018-01-22 12:19:19
|
Hi Stuart, > > unicode_printables = ''.join(filterfalse(str.isspace, \ > > (chr(i) for i in range(33, sys.maxunicode)))) > > Now that's a handy little generator snippet… It's buggy; it should be `sys.maxunicode + 1'. :-) Running it on Arch Linux with python 3.6.4-1, from 0 rather than 33, and condensing the list to inclusive ranges, I get 0000 0008 000e 001b 0021 0084 0086 009f 00a1 167f 1681 1fff 200b 2027 202a 202e 2030 205e 2060 2fff 3001 10ffff That looks like more than I'd expect. If the language you're parsing doesn't specify what's valid then you might want to look at https://en.wikipedia.org/wiki/Unicode_character_properties#General_Category and pick the value's you're interested in, and then filter for those, e.g. using Python's unicodedata module. -- Cheers, Ralph. https://plus.google.com/+RalphCorderoy |
From: Stuart L. <st...@vr...> - 2018-01-22 09:51:03
|
Hi Paul, On 22/01/18 19:42, Paul McGuire wrote: > Oddly enough, I could not specify the unicode range that you did, nor does sys.maxunicode work. This actually looks like a Python bug. I also see that your units is not quite as liberal as the unicode_printables one that I wrote, accepting only '%_/$' punctuation characters. I also see that your decimal expression accepts '_' spacers - the pyparsing_common.number expression that I used in the previous reply does not do this. > > I made a few other tweaks to your parser: > - added setName() calls, so that exceptions are a bit clearer looking ("expected unit-string" instead of "expected Re:('[a-zA-Z%_/$\\x80-\\xffffff]+')") > - used results names in hs_quantity so that the name-to-expression mapping was clearer (note that setName() sets the name of the expression itself, while setting results names sets the name to be used for the respective parsed results) Yeah, I've slowly been figuring those things out, latest code actually does make use of .setName quite a bit. > Out of curiosity, why Python2? I would only use Py2 for legacy work at this point, not for new projects. At the moment, we still have a legacy code base that uses Python 2.7… it is hoped (maybe this year, but who knows) that I can make the jump to 3.4+. We recently (late last year) dropped support for Debian Wheezy, which was the primary road block to adopting Python 3.x. Naturally though, I have to try and justify to the powers-at-be why we need to address the remaining technical debt. :-) For what it's worth, this particular library is written for both. While we use it in production on Python 2.7, others use it regularly on 3.4 and up. The unit tests cover 2.7, 3.4 and 3.5. I should add 3.6 in there too. -- _ ___ Stuart Longland - Systems Engineer \ /|_) | T: +61 7 3535 9619 \/ | \ | 38b Douglas Street F: +61 7 3535 9699 SYSTEMS Milton QLD 4064 http://www.vrt.com.au |
From: Paul M. <pt...@au...> - 2018-01-22 09:42:13
|
Your sample code was right in front of me! import pyparsing as pp class Quantity(object): def __init__(self, value, unit): self.value = value self.unit = unit def __repr__(self): return 'Q(%r, %r)' % (self.value, self.unit) # hs_unit = pp.Regex(r"[a-zA-Z%_/$\x80-\x{:x}]+".format(sys.maxunicode)) hs_unit = pp.Regex(r"[a-zA-Z%_/$\x80-\xffffff]+").setName("unit-string") hs_decimal = pp.Regex(r"-?[\d_]+(\.[\d_]+)?([eE][+\-]?[\d_]+)?").setParseAction( lambda toks : [float(toks[0].replace('_',''))]).setName("decimal-numeric") hs_quantity = (hs_decimal("value") + hs_unit.leaveWhitespace()("unit")).setParseAction( lambda toks: Quantity(**toks)) hs_quantity.runTests("""\ 123.123abc 123.123 abc """) Oddly enough, I could not specify the unicode range that you did, nor does sys.maxunicode work. This actually looks like a Python bug. I also see that your units is not quite as liberal as the unicode_printables one that I wrote, accepting only '%_/$' punctuation characters. I also see that your decimal expression accepts '_' spacers - the pyparsing_common.number expression that I used in the previous reply does not do this. I made a few other tweaks to your parser: - added setName() calls, so that exceptions are a bit clearer looking ("expected unit-string" instead of "expected Re:('[a-zA-Z%_/$\\x80-\\xffffff]+')") - used results names in hs_quantity so that the name-to-expression mapping was clearer (note that setName() sets the name of the expression itself, while setting results names sets the name to be used for the respective parsed results) Out of curiosity, why Python2? I would only use Py2 for legacy work at this point, not for new projects. -- Paul --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus |
From: Stuart L. <st...@vr...> - 2018-01-22 09:34:44
|
Hi Paul, On 22/01/18 19:17, Paul McGuire wrote: > Stuart - > > Yes, leaveWhitespace is what you need to use to suppress pyparsing's default behavior of skipping whitespace between expressions in your parser. IIRC, units was to be a trailing set of characters, with no intervening whitespace: > > # -*- coding: latin-1 -*- > > import pyparsing as pp > import sys > from itertools import filterfalse > > unicode_printables = ''.join(filterfalse(str.isspace, (chr(i) for i in range(33, sys.maxunicode)))) > unit_chars = unicode_printables Now that's a handy little generator snippet… I've been doing various ugly kludges to try and generate all the code points but that is nice and simple. > units = pp.Word(unit_chars) > numeric_value = pp.pyparsing_common.number("value") + pp.Optional(units.leaveWhitespace()("units")) > > numeric_value.runTests("""\ > 12345.6 > 12345.6mph > 12345.6ft² > 12345.7 mph > """) > > Prints: > > 12345.6 > [12345.6] > - value: 12345.6 > > > 12345.6mph > [12345.6, 'mph'] > - units: 'mph' > - value: 12345.6 > > > 12345.6ft² > [12345.6, 'ft²'] > - units: 'ft²' > - value: 12345.6 > > > 12345.7 mph > ^ > FAIL: Expected end of text (at char 8), (line:1, col:9) > > Sorry to not have gotten back to you sooner, but it looks like you have worked this out for yourself. I had a look at your first efforts at a pyparsing parser for ZINC when you first sent this out, but when I went to look for it again, it was no longer on Github. If you can repost a working link I may be able to help you tune up your parser a bit. No problems… while I'm on a deadline, I can understand that on this forum, we're all more or less volunteers, hence I just kept working at the problem. Either someone would reply or I'd figure it out; either way no harm is done. :-) Prior to using `pyparsing`, that file just stored the grammar definitions. `pyparsing`, with the `.setParseAction` method, more or less does nearly all of the parsing as well, so it no longer made sense to call it "grammar", as it was more than that. The file got renamed to "zincparser.py". https://github.com/vrtsystems/hszinc/blob/feature/WC-1173-add-list-support/hszinc/zincparser.py Hopefully things are a little cleaner than my first attempt, but there's still lots to be learned. `pyparsing` is quite a powerful little library, wished I had stumbled on it sooner. I've managed to get tests to pass once again, so that's a plus. Test coverage fell, but that's because a lot of code was able to be thrown out thanks to pyparsing. https://travis-ci.org/vrtsystems/hszinc/builds/331703708 Regards, -- _ ___ Stuart Longland - Systems Engineer \ /|_) | T: +61 7 3535 9619 \/ | \ | 38b Douglas Street F: +61 7 3535 9699 SYSTEMS Milton QLD 4064 http://www.vrt.com.au |
From: Paul M. <pt...@au...> - 2018-01-22 09:31:02
|
Stuart - Yes, leaveWhitespace is what you need to use to suppress pyparsing's default behavior of skipping whitespace between expressions in your parser. IIRC, units was to be a trailing set of characters, with no intervening whitespace: # -*- coding: latin-1 -*- import pyparsing as pp import sys from itertools import filterfalse unicode_printables = ''.join(filterfalse(str.isspace, (chr(i) for i in range(33, sys.maxunicode)))) unit_chars = unicode_printables units = pp.Word(unit_chars) numeric_value = pp.pyparsing_common.number("value") + pp.Optional(units.leaveWhitespace()("units")) numeric_value.runTests("""\ 12345.6 12345.6mph 12345.6ft² 12345.7 mph """) Prints: 12345.6 [12345.6] - value: 12345.6 12345.6mph [12345.6, 'mph'] - units: 'mph' - value: 12345.6 12345.6ft² [12345.6, 'ft²'] - units: 'ft²' - value: 12345.6 12345.7 mph ^ FAIL: Expected end of text (at char 8), (line:1, col:9) Sorry to not have gotten back to you sooner, but it looks like you have worked this out for yourself. I had a look at your first efforts at a pyparsing parser for ZINC when you first sent this out, but when I went to look for it again, it was no longer on Github. If you can repost a working link I may be able to help you tune up your parser a bit. -- Paul McGuire --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus |
From: Stuart L. <st...@vr...> - 2018-01-22 05:28:47
|
On 22/01/18 10:06, Stuart Longland wrote: > Okay, something is *definitely* buggy: >> stuartl@vk4msl-ws ~/vrt/projects/widesky/sdk/hszinc $ ipython2 >> Python 2.7.14 (default, Jan 17 2018, 17:36:45) >> Type "copyright", "credits" or "license" for more information. >> >> IPython 5.4.1 -- An enhanced Interactive Python. >> ? -> Introduction and overview of IPython's features. >> %quickref -> Quick reference. >> help -> Python's own help system. >> object? -> Details about 'object', use 'object??' for extra details. >> >> In [1]: import pyparsing as pp >> >> In [2]: class Quantity(object): >> ...: def __init__(self, value, unit): >> ...: self.value = value >> ...: self.unit = unit >> ...: def __repr__(self): >> ...: return 'Q(%r, %r)' % (self.value, self.unit) >> ...: >> >> In [3]: hs_unit = pp.Regex(ur"[a-zA-Z%_/$\x80-\xffffffff]+") >> ...: hs_decimal = pp.Regex(r"-?[\d_]+(\.[\d_]+)?([eE][+\-]?[\d_]+)?").setParseAction( >> ...: lambda toks : [float(toks[0].replace('_',''))]) >> ...: hs_quantity = (hs_decimal + hs_unit).setParseAction( >> ...: lambda toks : [Quantity(toks[0], unit=toks[1])]) >> ...: >> >> In [4]: hs_quantity.parseString('123.123 abc') >> Out[4]: ([Q(123.123, 'abc')], {}) >> >> In [5]: hs_quantity.parseString('123.123 abc', parseAll=True) >> Out[5]: ([Q(123.123, 'abc')], {}) > *Nowhere*, in those patterns, is a space allowed. Yet, it passes it > through. Okay, so the magic was `leaveWhitespace`… without that, it'll silently discard whitespace in around tokens in the parser. Working around it is a tad ugly, but doable: https://github.com/vrtsystems/hszinc/commit/4b517d679dc40766340eba87660a7bdf858a68fc Regards, -- _ ___ Stuart Longland - Systems Engineer \ /|_) | T: +61 7 3535 9619 \/ | \ | 38b Douglas Street F: +61 7 3535 9699 SYSTEMS Milton QLD 4064 http://www.vrt.com.au |
From: Stuart L. <st...@vr...> - 2018-01-22 00:06:38
|
On 19/01/18 16:16, Stuart Longland wrote: > I'm finding if I pass one in, it does: >> stuartl@vk4msl-ws ~/vrt/projects/widesky/sdk/hszinc $ ipython2 >> Python 2.7.14 (default, Jan 17 2018, 17:36:45) >> Type "copyright", "credits" or "license" for more information. >> >> IPython 5.4.1 -- An enhanced Interactive Python. >> ? -> Introduction and overview of IPython's features. >> %quickref -> Quick reference. >> help -> Python's own help system. >> object? -> Details about 'object', use 'object??' for extra details. >> >> In [1]: from hszinc import grammar >> >> In [2]: grammar.hs_quantity.parseString('123.45 notpartofquantity') >> Out[2]: ([BasicQuantity(123.45, 'notpartofquantity')], {}) Okay, something is *definitely* buggy: > stuartl@vk4msl-ws ~/vrt/projects/widesky/sdk/hszinc $ ipython2 > Python 2.7.14 (default, Jan 17 2018, 17:36:45) > Type "copyright", "credits" or "license" for more information. > > IPython 5.4.1 -- An enhanced Interactive Python. > ? -> Introduction and overview of IPython's features. > %quickref -> Quick reference. > help -> Python's own help system. > object? -> Details about 'object', use 'object??' for extra details. > > In [1]: import pyparsing as pp > > In [2]: class Quantity(object): > ...: def __init__(self, value, unit): > ...: self.value = value > ...: self.unit = unit > ...: def __repr__(self): > ...: return 'Q(%r, %r)' % (self.value, self.unit) > ...: > > In [3]: hs_unit = pp.Regex(ur"[a-zA-Z%_/$\x80-\xffffffff]+") > ...: hs_decimal = pp.Regex(r"-?[\d_]+(\.[\d_]+)?([eE][+\-]?[\d_]+)?").setParseAction( > ...: lambda toks : [float(toks[0].replace('_',''))]) > ...: hs_quantity = (hs_decimal + hs_unit).setParseAction( > ...: lambda toks : [Quantity(toks[0], unit=toks[1])]) > ...: > > In [4]: hs_quantity.parseString('123.123 abc') > Out[4]: ([Q(123.123, 'abc')], {}) > > In [5]: hs_quantity.parseString('123.123 abc', parseAll=True) > Out[5]: ([Q(123.123, 'abc')], {}) *Nowhere*, in those patterns, is a space allowed. Yet, it passes it through. -- _ ___ Stuart Longland - Systems Engineer \ /|_) | T: +61 7 3535 9619 \/ | \ | 38b Douglas Street F: +61 7 3535 9699 SYSTEMS Milton QLD 4064 http://www.vrt.com.au |
From: Stuart L. <st...@vr...> - 2018-01-19 06:36:15
|
Hi all, I've got a funny issue with trying to get pyparsing to parse a grammar for Project Haystack data. The data format I'm trying to parse is described here: https://www.project-haystack.org/doc/Zinc I'm slowly working my way up the parsing tree, but I'm finding pyparsing is tripping up on my grammar definitions. For the purpose of discussion, I've posted my grammar here: https://github.com/vrtsystems/hszinc/blob/feature/WC-1173-add-list-support/hszinc/grammar.py I'll admit up front I am new to pyparsing. Previously I used Parsimonious, but couldn't quite get to handle the recursive nature of Project Haystack data types, in particular, I had trouble making it parse a filter string. A proof of concept for pyparsing worked, so I'm trying to get a more complete grammar working so that I can parse the data coming back from Project Haystack. I'm finding though that some of my patterns are capturing more than I anticipated. If, for instance, I try to parse a quantity… a quantity is defined as a decimal number, followed by a unit string. The unit string may consist of letters, the symbols %, _, $ and /, or Unicode points 128 or above. Crucially, it may not match a space. I'm finding if I pass one in, it does: > stuartl@vk4msl-ws ~/vrt/projects/widesky/sdk/hszinc $ ipython2 > Python 2.7.14 (default, Jan 17 2018, 17:36:45) > Type "copyright", "credits" or "license" for more information. > > IPython 5.4.1 -- An enhanced Interactive Python. > ? -> Introduction and overview of IPython's features. > %quickref -> Quick reference. > help -> Python's own help system. > object? -> Details about 'object', use 'object??' for extra details. > > In [1]: from hszinc import grammar > > In [2]: grammar.hs_quantity.parseString('123.45 notpartofquantity') > Out[2]: ([BasicQuantity(123.45, 'notpartofquantity')], {}) That has taken ' notpartofquantity', and included it in the raw data for the Quantity. It should ignore that because of the space separation. This breaks hs_meta; which is supposed to parse metadata pairs and markers, e.g. aString:"testing" aNumber:123.45 aMarker Any ideas where I might be going wrong? Thanks in advance. Regards, -- _ ___ Stuart Longland - Systems Engineer \ /|_) | T: +61 7 3535 9619 \/ | \ | 38b Douglas Street F: +61 7 3535 9699 SYSTEMS Milton QLD 4064 http://www.vrt.com.au |
From: Gre7g L. <haf...@mo...> - 2018-01-06 16:59:19
|
Sup Pyparsing https://goo.gl/wefKBw https://goo.gl/jdzxky |
From: agtilden <agt...@gi...> - 2017-11-15 16:14:59
|
Hi Pyparsing http://bit.ly/2AMkF2k Agtilden |
From: <pt...@au...> - 2017-11-03 12:30:11
|
---- Athanasios Anastasiou <ath...@gm...> wrote: > The second example is closer to what I am after, but there does not seem to > be a "return" on make_list (?). Is a return implied here? > If None is returned (which is what Python does as a default if no return statement is present), then pyparsing will retain the tokens passed in as the parsed data. Otherwise, pyparsing will replace the parsed data with whatever is returned by the parse action. (If you really want to return None, return [None]). This makes it easy to write parse actions that update the parsed tokens in place, such as when adding new named results. Here's an example that parses a hex number of the form "#xxxxxx" which could represent an RGB color tuple: hexnumber = pp.Word('#', pp.hexnums) hexnumber.addParseAction(lambda t: int(t[0][1:], 16)) color = "#7fff00" print(hexnumber.parseString(color).dump()) And it prints: [8388352] If we add a second parse action (which has no return statement, and thus returns None): def get_rgb(t): # update parsed tokens in-place, adding values for red, green, and blue int_value = t[0] int_value, t['b'] = divmod(int_value, 256) int_value, t['g'] = divmod(int_value, 256) int_value, t['r'] = divmod(int_value, 256) hexnumber.addParseAction(get_rgb) print(hexnumber.parseString(color).dump()) The parse tokens are updated in-place and we get: [8388352] - b: 0 - g: 255 - r: 127 (Note that you must use the dict-style access in the body of the parse action in order to set new results names.) -- Paul |
From: Athanasios A. <ath...@gm...> - 2017-11-03 11:37:17
|
Hello Paul Thank you very much for your response. I am sorry about the delay in replying, my attention was diverted to a report that required my input in the last few weeks but I am back into this now. I think that this is what I may be missing: > Bear in mind that the return value from parseString is *always* a ParseResults, even if it is just `pp.pyparsing_common.integer. parseString("123")`. My Integer class has a parseAction that returns an integer and that is that. The integer does not identify itself as a ParseResults which BTW has only one field of type integer. When I am trying to do the same with my Dict and List classes, I always get back a ParseResults. Now, knowing that this will always be a ParseResults which can be interpreted as whatever is one thing. What I would "ideally" expect is for the item that is returned from the parseAction to be emitted as is. The second example is closer to what I am after, but there does not seem to be a "return" on make_list (?). Is a return implied here? All the best Athanasios Anastasiou On Fri, Oct 20, 2017 at 1:24 PM, <pt...@au...> wrote: > I looked at this briefly last week, I thought I had a working example of > this in the parsePythonValue.py example, but it seems to have the same > problem. > > I thought I had worked out a working version at one time, using ungroup, > but have not succeeded with that. > > Here is an example of an expression and parse action that creates a list. > Bear in mind that the return value from parseString is *always* a > ParseResults, even if it is just `pp.pyparsing_common.integer. > parseString("123")`. > > Without the parse action, the parsed list is a ParseResults returned as > the 0'th element of a ParseResults: > > import pyparsing as pp > > LBRACK, RBRACK = map(pp.Suppress, "[]") > > item = pp.Word(pp.alphas) > > list_expr = LBRACK + pp.delimitedList(item) + RBRACK > > ret = pp.Group(list_expr).parseString("[a,b,c,d]") > print(ret) > print(type(ret)) > print(ret[0]) > print(type(ret[0])) > > Gives: > [['a', 'b', 'c', 'd']] > <class 'pyparsing.ParseResults'> > ['a', 'b', 'c', 'd'] > <class 'pyparsing.ParseResults'> > > > > Adding this parse action, we get a list returned as the 0'th element of a > ParseResults. Note *no* Group around the list expression: > > def make_list(tokens): > contents = tokens.asList() > tokens[:] = (contents,) > > list_expr.addParseAction(make_list) > ret = list_expr.parseString("[a,b,c,d]") > print(ret) > print(type(ret)) > print(ret[0]) > print(type(ret[0])) > > Gives: > > [['a', 'b', 'c', 'd']] > <class 'pyparsing.ParseResults'> > ['a', 'b', 'c', 'd'] > <class 'list'> > > Does that get you closer? > > -- Paul > > ---- Athanasios Anastasiou <ath...@gm...> wrote: > > Hello everyone > > > > Any ideas on the attached? > > > > All the best > > AA > > > > > > ---------- Forwarded message ---------- > > From: Athanasios Anastasiou <ath...@gm...> > > Date: Wed, Oct 4, 2017 at 11:44 AM > > Subject: Returning an actual `list` > > To: pyp...@li... > > > > > > Hello > > > > I have set up a very simple "primitive data type" parsing system to parse > > numbers, quoted strings, lists and dictionaries. The last two are > following > > Python's convention. > > > > While this is working, I am having trouble returning specific data types > > from the "action" of the LIST definition. > > > > Here is a snippet: > > > > LIST = pyparsing.Forward() > > DICT = pyparsing.Forward() > > > > VALUE = (NUMBER|IDENTIFIER|DICT|pyparsing.Group(LIST)) > > > > KEY_VALUE_PAIR = pyparsing.Group(IDENTIFIER("key") + > > pyparsing.Suppress(":") + VALUE("value")) > > > > LIST << pyparsing.Suppress("[") + pyparsing.delimitedList(VALUE) + > > pyparsing.Suppress("]") > > DICT << pyparsing.Suppress("{") + pyparsing.delimitedList(KEY_VALUE_PAIR) > + > > pyparsing.Suppress("}") > > > > So, when you are trying to parse something like: [1,2,3,4,[5,6]], this is > > returned as a pyparsing.ParseResults type of object, rather than a > `list`. > > I have tried to set a simple parseAction with `lambda s,l,t: list(t)` or > > `lambda s,l,t:list(t[0])` but I am still getting back a ParseResults > object. > > > > Ideally, I would like the rule to return a list, just like the INT rule > > returns a proper Python integer. > > > > Any ideas about what am I missing? > > > > All the best > > AA > > ------------------------------------------------------------ > ------------------ > > Check out the vibrant tech community on one of the world's most > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > _______________________________________________ > > Pyparsing-users mailing list > > Pyp...@li... > > https://lists.sourceforge.net/lists/listinfo/pyparsing-users > > |
From: <pt...@au...> - 2017-10-20 12:41:04
|
I looked at this briefly last week, I thought I had a working example of this in the parsePythonValue.py example, but it seems to have the same problem. I thought I had worked out a working version at one time, using ungroup, but have not succeeded with that. Here is an example of an expression and parse action that creates a list. Bear in mind that the return value from parseString is *always* a ParseResults, even if it is just `pp.pyparsing_common.integer.parseString("123")`. Without the parse action, the parsed list is a ParseResults returned as the 0'th element of a ParseResults: import pyparsing as pp LBRACK, RBRACK = map(pp.Suppress, "[]") item = pp.Word(pp.alphas) list_expr = LBRACK + pp.delimitedList(item) + RBRACK ret = pp.Group(list_expr).parseString("[a,b,c,d]") print(ret) print(type(ret)) print(ret[0]) print(type(ret[0])) Gives: [['a', 'b', 'c', 'd']] <class 'pyparsing.ParseResults'> ['a', 'b', 'c', 'd'] <class 'pyparsing.ParseResults'> Adding this parse action, we get a list returned as the 0'th element of a ParseResults. Note *no* Group around the list expression: def make_list(tokens): contents = tokens.asList() tokens[:] = (contents,) list_expr.addParseAction(make_list) ret = list_expr.parseString("[a,b,c,d]") print(ret) print(type(ret)) print(ret[0]) print(type(ret[0])) Gives: [['a', 'b', 'c', 'd']] <class 'pyparsing.ParseResults'> ['a', 'b', 'c', 'd'] <class 'list'> Does that get you closer? -- Paul ---- Athanasios Anastasiou <ath...@gm...> wrote: > Hello everyone > > Any ideas on the attached? > > All the best > AA > > > ---------- Forwarded message ---------- > From: Athanasios Anastasiou <ath...@gm...> > Date: Wed, Oct 4, 2017 at 11:44 AM > Subject: Returning an actual `list` > To: pyp...@li... > > > Hello > > I have set up a very simple "primitive data type" parsing system to parse > numbers, quoted strings, lists and dictionaries. The last two are following > Python's convention. > > While this is working, I am having trouble returning specific data types > from the "action" of the LIST definition. > > Here is a snippet: > > LIST = pyparsing.Forward() > DICT = pyparsing.Forward() > > VALUE = (NUMBER|IDENTIFIER|DICT|pyparsing.Group(LIST)) > > KEY_VALUE_PAIR = pyparsing.Group(IDENTIFIER("key") + > pyparsing.Suppress(":") + VALUE("value")) > > LIST << pyparsing.Suppress("[") + pyparsing.delimitedList(VALUE) + > pyparsing.Suppress("]") > DICT << pyparsing.Suppress("{") + pyparsing.delimitedList(KEY_VALUE_PAIR) + > pyparsing.Suppress("}") > > So, when you are trying to parse something like: [1,2,3,4,[5,6]], this is > returned as a pyparsing.ParseResults type of object, rather than a `list`. > I have tried to set a simple parseAction with `lambda s,l,t: list(t)` or > `lambda s,l,t:list(t[0])` but I am still getting back a ParseResults object. > > Ideally, I would like the rule to return a list, just like the INT rule > returns a proper Python integer. > > Any ideas about what am I missing? > > All the best > AA > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Pyparsing-users mailing list > Pyp...@li... > https://lists.sourceforge.net/lists/listinfo/pyparsing-users |
From: Athanasios A. <ath...@gm...> - 2017-10-20 10:08:03
|
Hello everyone Any ideas on the attached? All the best AA ---------- Forwarded message ---------- From: Athanasios Anastasiou <ath...@gm...> Date: Wed, Oct 4, 2017 at 11:44 AM Subject: Returning an actual `list` To: pyp...@li... Hello I have set up a very simple "primitive data type" parsing system to parse numbers, quoted strings, lists and dictionaries. The last two are following Python's convention. While this is working, I am having trouble returning specific data types from the "action" of the LIST definition. Here is a snippet: LIST = pyparsing.Forward() DICT = pyparsing.Forward() VALUE = (NUMBER|IDENTIFIER|DICT|pyparsing.Group(LIST)) KEY_VALUE_PAIR = pyparsing.Group(IDENTIFIER("key") + pyparsing.Suppress(":") + VALUE("value")) LIST << pyparsing.Suppress("[") + pyparsing.delimitedList(VALUE) + pyparsing.Suppress("]") DICT << pyparsing.Suppress("{") + pyparsing.delimitedList(KEY_VALUE_PAIR) + pyparsing.Suppress("}") So, when you are trying to parse something like: [1,2,3,4,[5,6]], this is returned as a pyparsing.ParseResults type of object, rather than a `list`. I have tried to set a simple parseAction with `lambda s,l,t: list(t)` or `lambda s,l,t:list(t[0])` but I am still getting back a ParseResults object. Ideally, I would like the rule to return a list, just like the INT rule returns a proper Python integer. Any ideas about what am I missing? All the best AA |
From: Athanasios A. <ath...@gm...> - 2017-10-04 10:44:35
|
Hello I have set up a very simple "primitive data type" parsing system to parse numbers, quoted strings, lists and dictionaries. The last two are following Python's convention. While this is working, I am having trouble returning specific data types from the "action" of the LIST definition. Here is a snippet: LIST = pyparsing.Forward() DICT = pyparsing.Forward() VALUE = (NUMBER|IDENTIFIER|DICT|pyparsing.Group(LIST)) KEY_VALUE_PAIR = pyparsing.Group(IDENTIFIER("key") + pyparsing.Suppress(":") + VALUE("value")) LIST << pyparsing.Suppress("[") + pyparsing.delimitedList(VALUE) + pyparsing.Suppress("]") DICT << pyparsing.Suppress("{") + pyparsing.delimitedList(KEY_VALUE_PAIR) + pyparsing.Suppress("}") So, when you are trying to parse something like: [1,2,3,4,[5,6]], this is returned as a pyparsing.ParseResults type of object, rather than a `list`. I have tried to set a simple parseAction with `lambda s,l,t: list(t)` or `lambda s,l,t:list(t[0])` but I am still getting back a ParseResults object. Ideally, I would like the rule to return a list, just like the INT rule returns a proper Python integer. Any ideas about what am I missing? All the best AA |