Startpunkten

This commit is contained in:
2026-03-05 13:31:50 +01:00
commit 86a20ae0e1
16 changed files with 1305 additions and 0 deletions

57
Lab2/parser.y Normal file
View 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;
}