possible lexer states: STATE_NORMAL STATE_STRING STATE_FSTRING STATE_INTERPOLATION state transitions: STATE_NORMAL + " -> push STATE_STRING STATE_NORMAL + ' -> push STATE_FSTRING STATE_STRING + " -> pop STATE_FSTRING + { -> push STATE_INTERPOLATION, record brace depth STATE_FSTRING + ' -> pop STATE_INTERPOLATION + } (at recorded brace depth) -> pop