come può l'interprete python riconoscere il blocco di codice

2

L'aspetto più insolito di Python è che gli spazi bianchi sono significativi invece dei delimitatori di blocchi (parentesi → "{}" nella famiglia di linguaggi C), viene usato il rientro per indicare dove iniziano e terminano i blocchi.
come può l'interprete Python riconoscere il blocco di codice?

    
posta AminM 08.07.2012 - 13:34
fonte

4 risposte

11

La documentazione di Python, nella sezione Analisi lessicale, descrive brevemente come funziona l'analisi dell'indentazione . In breve, il tokeniser genera speciali token INDENT e DEDENT utilizzati dal parser quando decidono dove iniziano e terminano i blocchi di codice. Questi token (approssimativamente) corrispondono ai token { e } in lingue simili a C.

    
risposta data 08.07.2012 - 21:41
fonte
8

Ricorda che lo spazio bianco appare solo come un altro personaggio dell'interprete.

  • Una scheda è 0x09 in ASCII
  • Uno spazio è 0x20 in ASCII

Un interprete è poco più di un pattern matcher che attiva quindi regole predefinite.

    
risposta data 08.07.2012 - 13:54
fonte
2

A livello di parser, non è poi così difficile. Il parser ha solo bisogno di una variabile per tenere traccia del livello di indentazione del blocco corrente. E quando va a leggere una nuova riga, conta gli spazi iniziali (o le schede) e confronta il valore con il rientro del blocco corrente, quindi applica un algoritmo simile a questo:

if currentIndent = currentBlock.indent then
   parse line in the context of currentBlock
else if currentIndent > currentBlock.indent then
   create sub-block of currentBlock and parse line in that context
else finish currentBlock and run this same comparison on currentBlock.parent
    
risposta data 08.07.2012 - 14:40
fonte
1
  • Un blocco inizia quando aumenta il rientro.
  • Un blocco termina quando il rientro diminuisce.
  • È possibile chiudere più blocchi con la stessa diminuzione.
  • I blocchi possono nidificare.
  • I blocchi sequenziali con la stessa profondità di indentazione si uniscono.
risposta data 08.07.2012 - 13:51
fonte

Leggi altre domande sui tag