/* * Laboration 2 i C och UNIX * * Komplett shell * ========================================= * * Christian Ohlsson, di7chro@cse.kau.se * Stefan Sonesson, di7stes@cse.kau.se * * Karlstads Universitet, 991209 * * *=========================================== */ %{ #include #include "tree.h" extern treePtr tree; %} %union { int txt; treePtr tPtr; }; %token NL PIPE SEMI GREAT LESS AND DBLARR EXIT %token WORD OPT %type rad ccmd scmd cmd %start rad %% rad : ccmd NL { tree=$1; return 0;} | NL { return 1;} ; ccmd : ccmd PIPE scmd { $$=(treePtr)makeNode(PIPE, $1, $3); } | ccmd AND { $$=(treePtr)makeNode(AND, $1, NULL); } | ccmd SEMI scmd { $$=(treePtr)makeNode(SEMI, $1, $3); } | ccmd SEMI { $$=(treePtr)makeNode(SEMI, $1, NULL);} | scmd { $$=$1;} ; scmd : scmd GREAT WORD { $$=(treePtr)makeNode(GREAT, $1, makeLeaf($3));} | scmd DBLARR WORD { $$=(treePtr)makeNode(DBLARR, $1, makeLeaf($3));} | scmd LESS WORD { $$=(treePtr)makeNode(LESS, $1, makeLeaf($3));} | cmd { $$=$1;} | error { $$=NULL;} ; cmd : cmd WORD { $$=$1;} | WORD { $$=(treePtr)makeLeaf($1);} ; %% int yyerror() { fprintf(stderr, "\nSyntax error\n"); tree=NULL; return 0; }