+/* Copyright (c) 2012-2019. The SimGrid Team.
+ * All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
%{
+#include "simgrid/config.h"
+#if !HAVE_UNISTD_H
+#define YY_NO_UNISTD_H /* hello Windows */
+#endif
- //#include "../../../include/xbt/automatonparse_promela.h"
- //#include "../../../include/xbt/automaton.h"
-#include "automaton_parse.yy.c"
+#include "automaton_lexer.yy.c"
#include <xbt/automaton.h>
-#include <xbt/automatonparse_promela.h>
void yyerror(const char *s);
+static void new_state(char* id, int src);
+static void new_transition(char* id, xbt_automaton_exp_label_t label);
+
%}
%union{
double real;
int integer;
char* string;
- xbt_exp_label_t label;
+ xbt_automaton_exp_label_t label;
}
%token NEVER
%%
-automaton : NEVER LEFT_BRACE stateseq RIGHT_BRACE
+automaton : NEVER LEFT_BRACE stateseq RIGHT_BRACE
;
-stateseq :
- | ID COLON { new_state($1, 1);} IF option FI SEMI_COLON stateseq
+stateseq :
+ | ID COLON { new_state($1, 1);} IF option FI SEMI_COLON stateseq
;
option :
;
exp : LEFT_PAR exp RIGHT_PAR { $$ = $2; }
- | exp OR exp { $$ = new_label(0, $1, $3); }
- | exp AND exp { $$ = new_label(1, $1, $3); }
- | NOT exp { $$ = new_label(2, $2); }
- | CASE_TRUE { $$ = new_label(4); }
- | ID { $$ = new_label(3, $1); }
+ | exp OR exp { $$ = xbt_automaton_exp_label_new_or($1, $3); }
+ | exp AND exp { $$ = xbt_automaton_exp_label_new_and($1, $3); }
+ | NOT exp { $$ = xbt_automaton_exp_label_new_not($2); }
+ | CASE_TRUE { $$ = xbt_automaton_exp_label_new_one(); }
+ | ID { $$ = xbt_automaton_exp_label_new_predicat($1); }
;
-
+
%%