qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: akong@redhat.com, qemu-devel@nongnu.org, mdroth@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH 0/9] Our QAPI parser is a hack, replace it
Date: Fri, 26 Jul 2013 12:47:57 -0500	[thread overview]
Message-ID: <87a9l99prm.fsf@codemonkey.ws> (raw)
In-Reply-To: <87fvv172pk.fsf@blackfin.pond.sub.org>

Markus Armbruster <armbru@redhat.com> writes:

> Anthony Liguori <aliguori@us.ibm.com> writes:
>
>> Markus Armbruster <armbru@redhat.com> writes:
>>
>>> If you think I'm exaggerating, check out the list of issues in PATCH
>>> 3/9.
>>
>> You are not.
>>
>> However, I think we can drop the whole thing and just use the JSON
>> module in Python.  The bit below seems to work:
>>
>>   import json.decoder, re
>>   from ordereddict import OrderedDict
>>   
>>   WHITESPACE = re.compile(r'(#.*\n|[ \r\t\n]*)*', re.MULTILINE)
>>   
>>   def make_object(pairs):
>>       return OrderedDict(pairs)
>>   
>>   def qapi_parse(data):
>>       _w = WHITESPACE.match
>>       idx = 0
>>       while idx < len(data):
>>           idx = _w(data, idx).end()
>>           if idx == len(data):
>>               break
>>           decoder = json.decoder.JSONDecoder(object_pairs_hook=make_object)
>>           obj, idx = decoder.raw_decode(data, idx)
>>           yield obj
>>   
>>   if __name__ == '__main__':
>>       with open('qapi-schema.json', 'r') as fp:
>>           data = fp.read().replace("'", '"')
>>   
>>       exprs = list(qapi_parse(data))
>>       print exprs
>
> I tried to find a way to use JSONDecoder, but not hard enough,
> apparently.
>
> The fp.read().replace("'", '"') is no good, because it blindly replaces
> within strings, such as 'the cat\'s meow'.
>
> Can your code handle comments between arbitrary tokens?  I suspect they
> work only between top-level expressions, but I could be wrong; Python
> isn't my strongest language, and I didn't test this.

It cannot.  The python JSON module has an optimized C implementation
which is less flexible than the python one.  Unfortunately it looks like
at least in my copy of python, the python version has bitrotted.

OTOH, the warnings are very clear when you attempt to do this.

Regards,

Anthony Liguori

  reply	other threads:[~2013-07-26 17:48 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-26 12:39 [Qemu-devel] [PATCH 0/9] Our QAPI parser is a hack, replace it Markus Armbruster
2013-07-26 12:39 ` [Qemu-devel] [PATCH 1/9] tests: QAPI schema parser tests Markus Armbruster
2013-07-26 12:48   ` Eric Blake
2013-07-26 14:16     ` Markus Armbruster
2013-07-26 14:57       ` Eric Blake
2013-07-26 15:31         ` Markus Armbruster
2013-07-26 12:39 ` [Qemu-devel] [PATCH 2/9] tests: Use qapi-schema-test.json as schema parser test Markus Armbruster
2013-07-26 13:17   ` Eric Blake
2013-07-27 15:34     ` Markus Armbruster
2013-07-26 12:39 ` [Qemu-devel] [PATCH 3/9] qapi.py: Restructure lexer and parser Markus Armbruster
2013-07-26 13:54   ` Eric Blake
2013-07-26 12:39 ` [Qemu-devel] [PATCH 4/9] qapi.py: Decent syntax error reporting Markus Armbruster
2013-07-26 15:30   ` Eric Blake
2013-07-26 19:33     ` Markus Armbruster
2013-07-26 19:48       ` Paolo Bonzini
2013-07-26 19:57         ` Eric Blake
2013-07-26 12:39 ` [Qemu-devel] [PATCH 5/9] qapi.py: Reject invalid characters in schema file Markus Armbruster
2013-07-26 15:32   ` Eric Blake
2013-07-26 12:39 ` [Qemu-devel] [PATCH 6/9] qapi.py: Fix schema parser to check syntax systematically Markus Armbruster
2013-07-26 15:56   ` Eric Blake
2013-07-26 19:35     ` Markus Armbruster
2013-07-26 19:42       ` Eric Blake
2013-07-26 12:39 ` [Qemu-devel] [PATCH 7/9] qapi.py: Fix diagnosing non-objects at a schema's top-level Markus Armbruster
2013-07-26 16:03   ` Eric Blake
2013-07-26 12:39 ` [Qemu-devel] [PATCH 8/9] qapi.py: Rename expr_eval to expr in parse_schema() Markus Armbruster
2013-07-26 16:13   ` Eric Blake
2013-07-26 12:39 ` [Qemu-devel] [PATCH 9/9] qapi.py: Permit comments starting anywhere on the line Markus Armbruster
2013-07-26 16:15   ` Eric Blake
2013-07-26 14:41 ` [Qemu-devel] [PATCH 0/9] Our QAPI parser is a hack, replace it Anthony Liguori
2013-07-26 15:36   ` Markus Armbruster
2013-07-26 17:47     ` Anthony Liguori [this message]
2013-07-26 19:48       ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87a9l99prm.fsf@codemonkey.ws \
    --to=aliguori@us.ibm.com \
    --cc=akong@redhat.com \
    --cc=armbru@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).