[Python-Dev] Assign(expr* targets, expr value) (original) (raw)
Benjamin Peterson benjamin at python.org
Fri Nov 22 13:29:47 CET 2013
- Previous message: [Python-Dev] Assign(expr* targets, expr value) - why targetS?
- Next message: [Python-Dev] Assign(expr* targets, expr value) - why targetS?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2013/11/22 anatoly techtonik <techtonik at gmail.com>:
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 ofexpr
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?
I don't know what sentence stream is, but otherwise looks right.
-- Regards, Benjamin
- Previous message: [Python-Dev] Assign(expr* targets, expr value) - why targetS?
- Next message: [Python-Dev] Assign(expr* targets, expr value) - why targetS?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]