New submission from David Halter <davidhalte...@gmail.com>:

Currently f-strings are a bit of a hack. They certainly work very well for 
users, but they are implemented in ast.c and therefore not part of the Python 
grammar and the tokenizer.

I want to change this. I wrote an alternative implementation of f-strings in 
parso (http://parso.readthedocs.io/en/latest/). The idea I have is to modify 
the Python grammar slightly 
(https://github.com/davidhalter/parso/blob/master/parso/python/grammar37.txt#L149):

fstring: FSTRING_START fstring_content* FSTRING_END
fstring_content: FSTRING_STRING | fstring_expr
fstring_conversion: '!' NAME
fstring_expr: '{' testlist [ fstring_conversion ] [ fstring_format_spec ] '}'
fstring_format_spec: ':' fstring_content*

We would push most of the hard work to the tokenizer. This obviously means that 
we have to add a lot of code there. I wrote a tokenizer in Python for parso 
here: in 
https://github.com/davidhalter/parso/blob/master/parso/python/tokenize.py. It 
is definitely working well. The biggest difference to the current tokenizer.c 
is that you have to work with stacks and be way more context-sensitive.

There were attempts to change the Grammar of f-strings like 
https://www.python.org/dev/peps/pep-0536/. It hasn't caught on, because it 
tried to change the semantics of f-strings. The implementation in parso has not 
changed the semantics of f-strings.

In a first step I would like to get this working for CPython and not 
tokenize.py. Modifying tokenize.py will not be part of my initial work here.

I have discussed this with Ɓukasz Langa, so if you guys have no objections I 
will start working on it. Please let me know if you support this or not.

----------
components: Interpreter Core
messages: 318547
nosy: davidhalter
priority: normal
severity: normal
status: open
title: f-strings should be part of the Grammar
type: enhancement
versions: Python 3.8

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue33754>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to