Startpunkten
This commit is contained in:
57
Lab2/parser.y
Normal file
57
Lab2/parser.y
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user