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.