[Python-Dev] Assign(expr* targets, expr value) (original) (raw)
Eli Bendersky eliben at gmail.com
Fri Nov 22 18:05:28 CET 2013
- Previous message: [Python-Dev] Assign(expr* targets, expr value) - why targetS?
- Next message: [Python-Dev] [RELEASE] Python 2.7.6
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Nov 22, 2013 at 3:21 AM, anatoly techtonik <techtonik at gmail.com>wrote:
On Fri, Nov 15, 2013 at 5:43 PM, Benjamin Peterson <benjamin at python.org> wrote: > 2013/11/15 anatoly techtonik <techtonik at gmail.com>: >> On Tue, Nov 12, 2013 at 5:08 PM, Benjamin Peterson <benjamin at python.org> wrote: >>> 2013/11/12 anatoly techtonik <techtonik at gmail.com>: >>>> On Sun, Nov 10, 2013 at 8:34 AM, Benjamin Peterson <_ _benjamin at python.org> wrote: >>>>> 2013/11/10 anatoly techtonik <techtonik at gmail.com>: >>>>>> http://hg.python.org/cpython/file/1ee45eb6aab9/Parser/Python.asdl >>>>>> >>>>>> In Assign(expr* targets, expr value), why the first argument is a list? >>>>> >>>>> x = y = 42 >>>> >>>> Thanks. >>>> >>>> Speaking of this ASDL.
expr* targets
means that multiple entities of >>>>expr
under the name 'targets' can be passed to Assign statement. >>>> Assign uses them as left value. Butexpr
definition contains things >>>> that can not be used as left side assignment targets: >>>> >>>> expr = BoolOp(boolop op, expr* values) >>>> | BinOp(expr left, operator op, expr right) >>>> ... >>>> | Str(string s) -- need to specify raw, unicode, etc? >>>> | Bytes(bytes s) >>>> | NameConstant(singleton value) >>>> | Ellipsis >>>> >>>> -- the following expression can appear in assignment context >>>> | Attribute(expr value, identifier attr, exprcontext ctx) >>>> | Subscript(expr value, slice slice, exprcontext ctx) >>>> | Starred(expr value, exprcontext ctx) >>>> | Name(identifier id, exprcontext ctx) >>>> | List(expr* elts, exprcontext ctx) >>>> | Tuple(expr* elts, exprcontext ctx) >>>> >>>> If I understand correctly, this is compiled into C struct definitions >>>> (Python-ast.c), and there is a code to traverse the structure, but >>>> where is code that validates that the structure is correct? Is it done >>>> on the first level - text file parsing, before ASDL is built? If so, >>>> then what is the role of this ADSL exactly that the first step is >>>> unable to solve? >>> >>> Only valid expression targets are allowed during AST construction. See >>> setexprcontext in ast.c. >> >> Oh my. Now there is also CST in addition to AST. This stuff - >> http://docs.python.org/devguide/ - badly needs diagrams about data >> transformation toolchain from Python source code to machine >> execution instructions. I'd like some pretty stuff, but raw blogdiag >> hack will do the job http://blockdiag.com/en/blockdiag/index.html >> >> There is no setexprcontext in my copy of CPython code, which >> seems to be some alpha of Python 3.4 > > It's actually called setcontext.Ok. So what is the process? SOURCE --> TOKEN STREAM --> SENTENCE STREAM --> CST --> --> AST --> BYTECODE Is that right? >>>> Is it possible to fix ADSL to move
expr
that are allowed in Assign >>>> intoexpr
subset? What effect will it achieve? I mean - will ADSL >>>> compiler complain about wrong stuff on the left side, or it will still >>>> be a role of some other component. Which one? >>> >>> I'm not sure what you mean by anexpr
subset. >> >> Transform this: >> >> expr = BoolOp(boolop op, expr* values) >> | BinOp(expr left, operator op, expr right) >> ... >> | Str(string s) -- need to specify raw, unicode, etc? >> | Bytes(bytes s) >> | NameConstant(singleton value) >> | Ellipsis >> >> -- the following expression can appear in assignment context >> | Attribute(expr value, identifier attr, exprcontext ctx) >> | Subscript(expr value, slice slice, exprcontext ctx) >> | Starred(expr value, exprcontext ctx) >> | Name(identifier id, exprcontext ctx) >> | List(expr* elts, exprcontext ctx) >> | Tuple(expr* elts, exprcontext ctx) >> >> to this: >> >> expr = BoolOp(boolop op, expr* values) >> | BinOp(expr left, operator op, expr right) >> ... >> | Str(string s) -- need to specify raw, unicode, etc? >> | Bytes(bytes s) >> | NameConstant(singleton value) >> | Ellipsis >> >> -- the following expression can appear in assignment context >> | exprasgn >> >> exprasgn = >> Attribute(expr value, identifier attr, exprcontext ctx) >> | Subscript(expr value, slice slice, exprcontext ctx) >> | Starred(expr value, exprcontext ctx) >> | Name(identifier id, exprcontext ctx) >> | List(expr* elts, exprcontext ctx) >> | Tuple(expr* elts, exprcontext ctx) > > I doubt ASDL will let you do that. asdl.py is plain broken - wrong number of arguments passed to output function asdlc.py worked ok with fixed ASDL and generated - diff attached. I don't know what to check further - on Windows without Visual Studio. --
asdl.py is about to be replaced - please see http://bugs.python.org/issue19655 - I'm waiting for after the 3.4 branch to move forward with that.
Let's discuss any needed fixes in that issue.
Eli -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20131122/fbc018eb/attachment.html>
- Previous message: [Python-Dev] Assign(expr* targets, expr value) - why targetS?
- Next message: [Python-Dev] [RELEASE] Python 2.7.6
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]