Per loop e ricorsione per una nuova shell in C [chiuso]

-2

Codo un shell ew in C, che potrebbe essere fatto in diversi modi: Flex / bison, macchina a stati finiti, astratto albero di sintassi o semplicemente un tokenizer in C. Ora ho scritto un ciclo for che modifica la condizione dell'incremento e mi chiedo se è uguale a un FSM? Per prima cosa l'ho fatto come una macchina a stati finiti, ma quel codice era molto semplice. Ora lavoro sul farlo con loop o ricorsione, sperando di poter creare 2 metodi che si ricorrono reciprocamente nella costruzione di una pipeline, o che il ciclo for può gestire tutti i casi creando dinamicamente un array aumentando gli argomenti. Non mi sono ancora accontentato di un ragionevole MAX_PIPELINE_LENGTH , ma potrebbe anche essere dinamico. Ora la parte del codice di cui sto scrivendo guarda come segue e dà token all'input dalla shell, ad es. il parametro const char * cmd è una stringa che potrebbe essere qualcosa come echo 'foobar blarg'|grep foo|awk '{print $1}'|wc ma può solo analizzare il comando fino a 4 pipeline fino a questo punto.

Mi chiedo se sia addirittura possibile risolvere il problema con un ciclo for che implementa un FSM o un AST con un ciclo for e il modo in cui cerco di farlo o ho bisogno di una nuova strategia dove io " pensa alla ricorsione "dall'inizio piuttosto che sperando di rendere la funzione ricorsiva in seguito? Ho già il codice per verificare se un char è tra le quotazioni.

    
posta Niklas Rosencrantz 25.04.2016 - 19:41
fonte

1 risposta

1

Penso che tra le liste composte (che includono espressioni parentesi) e vari operatori (come |, & e amp; e ||, ...) la grammatica della shell sia fondamentalmente ricorsiva in natura, quindi sì, dovresti considerare la ricorsione in anticipo.

Ci sono molti modi per analizzare il linguaggio, ma per questa grammatica, in ogni modo in cui lo fai, il tuo parser deve gestire espressioni ricorsive in input e l'output del parser deve essere una sorta di costrutto ricorsivo.

Vedi qui .

Questo non significa necessariamente che devi usare un algoritmo ricorsivo per fare l'analisi, tuttavia, se non lo fai, avrai sicuramente bisogno di uno o più stack coltivabili per memorizzare lo stato di analisi intermedio, che tipo di regole esclude una semplice macchina a stati.

    
risposta data 25.04.2016 - 21:21
fonte

Leggi altre domande sui tag