57 lines
1.2 KiB
Plaintext
57 lines
1.2 KiB
Plaintext
/*
|
|
* Laboration 2 i C och UNIX
|
|
*
|
|
* Komplett shell
|
|
* =========================================
|
|
*
|
|
* Christian Ohlsson, di7chro@cse.kau.se
|
|
* Stefan Sonesson, di7stes@cse.kau.se
|
|
*
|
|
* Karlstads Universitet, 991209
|
|
*
|
|
*
|
|
*===========================================
|
|
*/
|
|
%{
|
|
#include <stdio.h>
|
|
#include "tree.h"
|
|
extern treePtr tree;
|
|
%}
|
|
|
|
%union {
|
|
int txt;
|
|
treePtr tPtr;
|
|
};
|
|
|
|
%token NL PIPE SEMI GREAT LESS AND DBLARR EXIT
|
|
%token<txt> WORD OPT
|
|
%type<tPtr> 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;
|
|
} |