%{ #include #include "extGlobal.h" #include "extFuncDefn.h" extern int lineNo; extern int yylex(); yyerror(char* ); //#define YYDEBUG 1 Commented by Aruna %} %union { char string[5024]; } %token SYNC SYNCAND SYNCOR SYNCALL SYNCANY STRING EQ VSTRING %token DSTRING %% program : element program | ; element : rib | normal | syncDecl ; rib : SYNC STRING { openServerFile($2); } params ':' STRING { writeFuncDefn($2, $4, $6); } body { writeOtherFunc($2, $4, $6); } ; params : '(' varList ')' { sprintf($$, "%s", $2); } | '(' ')' { sprintf($$, ""); } ; varList : pair ',' varList { sprintf($$, "%s, %s", $1, $3); } | pair { strcpy($$, $1); } ; pair : STRING STRING { sprintf($$, "%s %s", $1, $2); } ; body : '{' '}' ; normal : arcFuncCall | waitOnSync ; waitOnSync : SYNC '(' syncPair ')' ';' { processSync($3); } | SYNCAND '(' syncVarList ')' ';' { processSyncAnd($3); } | SYNCOR '(' syncVarList ')' ';' { processSyncOr($3); } | SYNCALL '(' ')' ';' { processSyncAll(); } | SYNCANY '(' ')' ';' { processSyncAny(); } ; syncVarList : syncPair ',' syncVarList { sprintf($$, "%s %s", $1, $3); } | syncPair { strcpy($$, $1); } ; syncPair : arg ',' '&' arg { sprintf($$, "%s &%s", $1, $4); } | arg ',' arg { sprintf($$, "%s %s", $1, $3); } ; arcFuncCall : VSTRING EQ funcCall { processArcFuncCall($1, $3); } ; funcCall : STRING '(' argList ')' ';' { sprintf($$, "%s %s", $1, $3); } | STRING '(' ')' ';' { strcpy($$, $1); } ; argList : arg ',' argList { sprintf($$, "%s %s", $1, $3); } | arg { strcpy($$, $1); } ; arg : VSTRING { strcpy($$, $1); } | STRING { strcpy($$, $1); } ; syncDecl : SYNC vars ';' { fprintf(cltFP, "SYNC %s;", $2);} ; vars : varg ',' vars { sprintf($$, "%s, %s", $1, $3); } | varg { strcpy($$, $1); } ; varg : stars arg { sprintf($$, "%s%s", $1, $2); saveSyncVar($2); } | arg { strcpy($$, $1); saveSyncVar($1); } ; stars : '*' stars { sprintf($$, "*%s", $2); } | '*' { strcpy($$, "*"); } ; %% yyerror(char* s) { fprintf(stderr, "%s: %s: parse error near line : %d\n", progName, fileName, lineNo); exit(1); }