J'essaie d'écrire un shell en utilisant yacc et lex et je rencontre des problèmes avec mes redirecteurs d'E/S. Actuellement, je peux utiliser le < et> opérateurs bien et dans n'importe quel ordre, mais mon problème est que je peux rediriger deux fois sans erreur, comme "ls> log> log2"yacc, appliquer une seule fois la règle
Mon code de règle est ci-dessous, quelqu'un peut-il donner moi quelques conseils sur la façon de résoudre ce problème? Merci!
io_mod:
iomodifier_opt io_mod
|
;
iomodifier_opt:
GREAT WORD {
printf(" Yacc: insert output \"%s\"\n", $2);
Command::_currentCommand._outFile = $2;
}
|
LESS WORD {
printf(" Yacc: insert input \"%s\"\n", $2);
Command::_currentCommand._inputFile = $2;
}
| /* can be empty */
;
EDIT: Après avoir parlé à mon TA, j'ai appris que je ne l'ai pas vraiment besoin d'avoir seulement 1 modificateur pour ma commande et que je peux effectivement avoir plusieurs copies de la même redirection E/S.
Est-ce une exigence pour une affectation? Le shell standard vous permet de rediriger plusieurs fois sans erreur, la sortie va juste dans le dernier fichier. Je ne suis pas sûr de la façon dont vous voulez que ce soit réaliste, mais il vous manque >> et <<. – CTT
En fait, ce n'est pas mentionné pour le travail que je fais, je pensais juste qu'il serait plus logique de ne pouvoir rediriger qu'une seule fois. Je suis d'accord la liste ci-dessus est incomplète, je vais ajouter l'autre redirection d'E/S plus tard. – samoz