Dichiarazione di variabili multiple, assegnazione di più variabili, istruzione "in" sensibile al contesto

-3

Ultimamente ho giocato con lo scrivere il mio linguaggio di programmazione, seguendo l'eccellente Crafting Interpreters ma ho colpito qualcosa di intoppo.

Vorrei estendere il parser per accettare dichiarazioni di variabili sotto forma di: var x,y,z e per consentire di decomprimere come [x,y,z]=[1,2,3] (notando che jlox non supporta ancora gli array). Infine mi piacerebbe consentire un'istruzione in in modo che tu possa fare: for(x in a) o testare:

var a = {'Larry': 1, 'Curly': 2}
var x = 'Moe'
var b = x in a
print b

L'output dovrebbe essere false . Cioè: l'istruzione in è sensibile al contesto perché si comporta sia come un'istruzione assegnatore / iteratore che come un test booleano. Questa sensibilità al contesto è particolarmente problematica perché durante l'analisi dovresti impiegare qualche tipo di lookback per vedere se ti trovi in una dichiarazione di loop o se sei "solo un'espressione".

Ad ogni modo - dato il jlox - mi stavo chiedendo se c'è qualcosa di banale che mi manca per implementare quanto sopra, o se sarà un compito piuttosto peloso?

    
posta FreeMemory 06.11.2017 - 19:13
fonte

1 risposta

0

Potresti riuscire a risolvere il problema "segregando" un po 'il costrutto "id in Expr" a livello di grammatica.

Ad esempio, Grammophone riporta quanto segue come LL (1), LALR (1), LR (1):

Stmts -> Stmt Stmts | .

Stmt -> for ( id InExpr ) { Stmts } | Expr | Let .

Let -> var id = Expr .

InExpr -> in Expr .

Expr -> id .

Che, scontato, non risolve completamente il tuo problema, ma ti avvicina; se hai scelto di usare un parser top-down, ti servirà solo per avere più lookahead (cioè, che LL (1)) per la sua procedura di analisi "Let" per gestire "var id = id in Expr" caso.

    
risposta data 14.11.2017 - 11:05
fonte

Leggi altre domande sui tag