Creazione di una parola chiave foreach con yacc o Bison e Flex
-
05-07-2019 - |
Domanda
Ho sviluppato un linguaggio di programmazione interpretato. È fortemente basato su C. Il problema è che voglio aggiungere una direttiva foreach
e non ho idea di come.
Sto usando Bison e Flex come generatore di parser e lexer.
Soluzione
Nella tua grammatica, vorresti un'espressione simile al seguente:
foreach := foreach ( name in name ) { statements }
Quando lo analizzi, dovresti essere in grado di tradurlo direttamente in un ciclo while nel tuo AST con un'istruzione aggiuntiva che assegna una variabile all'inizio.
Questo mi sembra il modo più semplice per farlo, ma probabilmente avrà limitazioni con più tipi di dati iterabili (ad esempio un elenco contro un array). In questo caso, potresti voler considerare il consolidamento di tutti gli iterabili in modo che abbiano un metodo coerente per ottenere l'elemento successivo.