[Pvfs2-cvs] commit by walt in pvfs2-1/src/common/statecomp:
codegen.c parser.y scanner.l statecomp.c
CVS commit program
cvs at parl.clemson.edu
Tue Aug 29 16:44:03 EDT 2006
Update of /projects/cvsroot/pvfs2-1/src/common/statecomp
In directory parlweb1:/tmp/cvs-serv32553/src/common/statecomp
Modified Files:
Tag: WALT3
codegen.c parser.y scanner.l statecomp.c
Log Message:
updates to parallel state machine code that get a basic test working
This test is still included in get_config.sm and needs to be removed.
Index: codegen.c
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/common/statecomp/codegen.c,v
diff -p -u -r1.20.4.2 -r1.20.4.3
--- codegen.c 1 Aug 2006 21:46:15 -0000 1.20.4.2
+++ codegen.c 29 Aug 2006 20:44:03 -0000 1.20.4.3
@@ -78,7 +78,7 @@ void gen_state_action(char *run_func, in
break;
case SM_PJMP:
fprintf(out_file, "\t .flag = SM_PJMP ,\n");
- fprintf(out_file, "\t .action.nested = &%s ,\n", run_func);
+ fprintf(out_file, "\t .action.func = &%s ,\n", run_func);
fprintf(out_file,"\t .pjtbl = ST_%s_pjtbl ,\n", state_name);
fprintf(out_file,"\t .trtbl = ST_%s_trtbl ", state_name);
break;
@@ -130,6 +130,9 @@ void gen_next_state(int flag, char *new_
fprintf(out_file,",\n");
}
switch (flag) {
+ case SM_PJMP:
+ fprintf(out_file, "\t .state_machine = &%s }", new_state);
+ break;
case SM_NEXT:
fprintf(out_file, "\t .next_state = &ST_%s }", new_state);
break;
Index: parser.y
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/common/statecomp/parser.y,v
diff -p -u -r1.25.36.1 -r1.25.36.2
--- parser.y 1 Aug 2006 15:52:02 -0000 1.25.36.1
+++ parser.y 29 Aug 2006 20:44:03 -0000 1.25.36.2
@@ -44,8 +44,12 @@ void yyerror(char *);
* vim: ts=8 sts=4 sw=4 expandtab
*/
+
%}
+%token-table
+%error-verbose
+
%union{
int i;
double f;
@@ -73,7 +77,7 @@ void yyerror(char *);
%token <i> SEMICOLON
%token <i> ARROW
%token <c> IDENTIFIER
-%token <c> INTEGER
+%token <c> INTVAL
%type <i> .state_body. state_body state_action .NESTED. .EXTERN.
@@ -175,7 +179,7 @@ state_action : RUN identifier SEMICOLO
{gen_state_action($2, SM_PJMP, $<c>-2);}
LBRACE
{gen_pjtbl($<c>-2);}
- task_list RBRACE SEMICOLON
+ task_list RBRACE
| JUMP identifier SEMICOLON
{gen_state_action($2, SM_JUMP, $<c>-2);}
;
@@ -187,7 +191,7 @@ task_list : task
task : return_code
{gen_return_code($1);}
ARROW identifier SEMICOLON
- {gen_next_state(SM_NEXT, $4);}
+ {gen_next_state(SM_PJMP, $4);}
;
transition_list : transition
@@ -218,10 +222,22 @@ target : identifier
;
return_code : SUCCESS {$$ = "0";}
- | INTEGER {$$ = enter_string($1);}
+ | INTVAL {$$ = enter_string($1);}
| identifier {$$ = $1;} /* check for decl */
| DEFAULT {$$ = "-1";}
;
identifier : IDENTIFIER {$$ = enter_string($1);}
;
+
+%%
+
+void yyerror(char *s)
+{
+ /*
+ fprintf(stderr,"syntax error line %d: %s\n", line, s);
+ */
+ fprintf(stderr,"syntax error line %d token %d(%s): %s\n",
+ line, yychar, yytname[yychar], s);
+}
+
Index: scanner.l
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/common/statecomp/scanner.l,v
diff -p -u -r1.17.14.1 -r1.17.14.2
--- scanner.l 1 Aug 2006 15:52:02 -0000 1.17.14.1
+++ scanner.l 29 Aug 2006 20:44:03 -0000 1.17.14.2
@@ -31,6 +31,7 @@ extern YYSTYPE yylval;
extern FILE *out_file;
extern char *in_file_name;
void produce_listing(int line, char *listing);
+static void lexerr(void);
extern int yylex(void);
extern void yyerror(char *);
@@ -62,7 +63,7 @@ string ["][^"]*["]
float1 [-+]?[0-9]+"."[0-9]*([eE][-+]?[0-9]+)?
float2 [-+]?"."[0-9]+([eE][-+]?[0-9]+)?
float3 [-+]?[0-9]+[eE][-+]?[0-9]+
-int [-+][0-9]+
+int [-+]?[0-9]+
id [_a-zA-Z][_0-9a-zA-Z]*
w [ \t\n]*
@@ -109,13 +110,18 @@ w [ \t\n]*
<CODE>{id} {LIST; yylval.c = yytext; return(IDENTIFIER);}
-<CODE>{int} {LIST; yylval.c = yytext; return(INTEGER);}
+<CODE>{int} {LIST; yylval.c = yytext; return(INTVAL);}
<CODE>"\n" {MAKELIST; line++;}
<CODE>[ \t]+ {LIST; /* eat white space */ }
-<*>. {LIST; fprintf(stderr,"scanner error bad char %s\n",yytext);}
+<*>. {LIST; lexerr();}
%%
+
+static void lexerr(void)
+{
+ fprintf(stderr,"scanner error line %d: bad char %s\n", line, yytext);
+}
/*
* Local variables:
Index: statecomp.c
===================================================================
RCS file: /projects/cvsroot/pvfs2-1/src/common/statecomp/statecomp.c,v
diff -p -u -r1.16 -r1.16.20.1
--- statecomp.c 29 Sep 2005 22:59:27 -0000 1.16
+++ statecomp.c 29 Aug 2006 20:44:03 -0000 1.16.20.1
@@ -39,6 +39,7 @@ int yyparse (void);
#endif
+
static void initialize(void);
static void parse_args(int argc, char **argv);
static void finalize(void);
@@ -64,12 +65,31 @@ char *in_file_name = 0;
int main(int argc, char **argv)
{
+ int retval;
initialize();
parse_args(argc, argv);
gen_init();
- yyparse();
- finalize();
- return 0;
+ retval = yyparse();
+ switch (retval)
+ {
+ case 0:
+ /* successful parse */
+ finalize();
+ break;
+ case 1:
+ /* syntax error */
+ fprintf(stderr,"yyparse returned syntax error\n");
+ break;
+ case 2:
+ /* out of memory error */
+ fprintf(stderr,"yyparse returned out of memory error\n");
+ break;
+ default:
+ /* unknown error */
+ fprintf(stderr,"yyparse returned unknown error\n");
+ break;
+ }
+ return retval;
}
static void initialize()
@@ -186,11 +206,7 @@ static void finalize(void)
free(in_file_name);
}
-void yyerror(char *s)
-{
- fprintf(stderr,"syntax error line %d: %s\n", line, s);
-}
-
+/* This should be in parser.y but I'll worry with it later - WBL */
void yywrap(void)
{
/*
More information about the Pvfs2-cvs
mailing list