Initial commit

This commit is contained in:
Artur Meski
2019-02-22 17:33:33 +00:00
parent 4eb029f91e
commit 6a17587378
43 changed files with 9703 additions and 0 deletions

278
verifier.y Normal file
View File

@@ -0,0 +1,278 @@
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "anread.h"
#include "antypes.h"
#include "anmacro.h"
#include "anproc.h"
#include "anpsmod.h"
/*#define Y_VERBOSE*/
void yyerror(const char *str)
{
fprintf(stderr, "error: %s\n", str);
}
int yywrap()
{
return 1;
}
int main(void)
{
AutNet an;
printf("TA Verifier\n\n");
yyparse();
an = get_autnet();
if (an.naut > 0) {
// prod_show(&an);
psmodel_builder(&an);
} else {
printf("Empty network!");
}
printf("\nDONE\n");
return 0;
}
%}
%start fileElements
%token NETTOK AUTOMATONTOK LOCATIONSTOK ACTIONSTOK CLOCKSTOK TRANSTOK OBRACETOK REACHTOK
%token EBRACETOK SEMICOLON COLON ATTOK INITIALTOK INVTOK COMMITEDTOK URGENTTOK
%token RARRTOK CONJUNCTION CONSTANT
%token REL_LE REL_LT REL_GE REL_GT REL_EQ OP_DIFF
%union {
int number;
char *string;
}
%token <string> WORD
%type <string> clock
%type <number> CONSTANT
%left CONJUNCTION
%%
fileElements:
| fileElements fileElement
;
fileElement:
NETTOK OBRACETOK netElements EBRACETOK SEMICOLON {
complete_net();
}
| REACHTOK OBRACETOK prodConfigurations EBRACETOK SEMICOLON
;
netElements:
| netElements netElement SEMICOLON
;
netElement:
| ACTIONSTOK OBRACETOK actions EBRACETOK {
actions_mkmap();
}
| AUTOMATONTOK WORD OBRACETOK automatonElements EBRACETOK {
complete_automaton($2);
}
;
automatonElements:
| automatonElements automatonElement SEMICOLON
;
automatonElement:
CLOCKSTOK OBRACETOK clocks EBRACETOK {
clocks_mkmap();
}
| LOCATIONSTOK OBRACETOK locations EBRACETOK {
locations_mkmap();
}
| TRANSTOK OBRACETOK transitions EBRACETOK
;
clocks:
| clocks clock SEMICOLON {
clocks_append($2);
}
;
clock:
WORD {
$$=$1;
}
;
locations:
| locations location SEMICOLON
;
location:
WORD OBRACETOK locationParams EBRACETOK { /* lokacja z parametrami */
locations_append($1);
}
| WORD { /* lokacja bez parametrow */
locations_append($1);
}
;
locationParams:
| locationParams locationParam SEMICOLON
;
locationParam:
INITIALTOK {
set_loc_type(LOC_INITIAL);
}
| URGENTTOK {
set_loc_type(LOC_URGENT);
}
| COMMITEDTOK {
set_loc_type(LOC_COMMITED);
}
| INVTOK clockConstr
;
actions:
| actions action SEMICOLON
;
action:
WORD OBRACETOK actionParams EBRACETOK {
actions_append($1);
}
| WORD {
actions_append($1);
}
;
actionParams:
| actionParams actionParam SEMICOLON
;
actionParam:
URGENTTOK {
set_act_type(ACT_URGENT);
}
;
prodConfigurations:
| prodConfigurations prodConfiguration SEMICOLON
;
prodConfiguration:
WORD OBRACETOK prodConfigurationElements EBRACETOK {
property_got_one($1);
}
;
prodConfigurationElements:
| prodConfigurationElements prodConfigurationElement
;
prodConfigurationElement:
WORD ATTOK WORD {
property_append_loc($1, $3); /* pamietac o zwolnieniu pamieci $1 i $3 */
}
;
/* TODO: sprawdzic czy ograniczenia sa wlasciwie wprowadzane */
clockConstr:
| clock REL_LE CONSTANT {
#ifdef Y_VERBOSE
printf("%s <= %d --normalisation--> %s - 0 <= %d\n", $1, $3, $1, $3);
#endif
constr_append(get_cur_clock_idx($1), 0, CONSTR_LE, $3);
free($1); /* tylko $1 jest stringiem */
}
| clock REL_LT CONSTANT {
#ifdef Y_VERBOSE
printf("%s < %d --normalisation--> %s - 0 < %d\n", $1, $3, $1, $3);
#endif
constr_append(get_cur_clock_idx($1), 0, CONSTR_LT, $3);
free($1);
}
| clock REL_GE CONSTANT {
#ifdef Y_VERBOSE
printf("%s >= %d --normalisation--> 0 - %s <= -%d\n", $1, $3, $1, $3);
#endif
constr_append(0, get_cur_clock_idx($1), CONSTR_LE, -$3);
free($1);
}
| clock REL_GT CONSTANT {
#ifdef Y_VERBOSE
printf("%s > %d --normalisation--> 0 - %s < -%d\n", $1, $3, $1, $3);
#endif
constr_append(0, get_cur_clock_idx($1), CONSTR_LT, -$3);
free($1);
}
| clock REL_EQ CONSTANT {
#ifdef Y_VERBOSE
printf("%s = %d --normalisation--> %s - 0 <= %d && 0 - %s <= -%d\n", $1, $3, $1, $3, $1, $3);
#endif
constr_append(get_cur_clock_idx($1), 0, CONSTR_LE, $3);
constr_append(0, get_cur_clock_idx($1), CONSTR_LE, -$3);
free($1);
}
| clock OP_DIFF clock REL_LE CONSTANT {
#ifdef Y_VERBOSE
printf("%s - %s <= %d --normalised--\n", $1, $3, $5);
#endif
constr_append(get_cur_clock_idx($1), get_cur_clock_idx($3), CONSTR_LE, $5);
free($1); free($3);
}
| clock OP_DIFF clock REL_LT CONSTANT {
#ifdef Y_VERBOSE
printf("%s - %s < %d --normalised--\n", $1, $3, $5);
#endif
constr_append(get_cur_clock_idx($1), get_cur_clock_idx($3), CONSTR_LT, $5);
free($1); free($3);
}
| clock OP_DIFF clock REL_GE CONSTANT {
#ifdef Y_VERBOSE
printf("%s - %s >= %d --normalisation--> %s - %s <= -%d\n", $1, $3, $5, $3, $1, $5);
#endif
constr_append(get_cur_clock_idx($1), get_cur_clock_idx($3), CONSTR_LE, -$5);
free($1); free($3);
}
| clock OP_DIFF clock REL_GT CONSTANT {
#ifdef Y_VERBOSE
printf("%s - %s > %d --normalisation--> %s - %s < -%d\n", $1, $3, $5, $3, $1, $5);
#endif
constr_append(get_cur_clock_idx($1), get_cur_clock_idx($3), CONSTR_LT, -$5);
free($1); free($3);
}
| clock OP_DIFF clock REL_EQ CONSTANT {
#ifdef Y_VERBOSE
printf("%s - %s = %d --normalisation--> %s - %s <= %d && %s - %s <= -%d\n", $1, $3, $5, $1, $3, $5, $3, $1, $5);
#endif
constr_append(get_cur_clock_idx($1), get_cur_clock_idx($3), CONSTR_LE, $5);
constr_append(get_cur_clock_idx($3), get_cur_clock_idx($1), CONSTR_LE, -$5);
free($1); free($3);
}
| clockConstr CONJUNCTION clockConstr
;
transitions:
| transitions transition SEMICOLON
;
transition:
WORD RARRTOK WORD COLON WORD COLON clockConstr COLON OBRACETOK clocks EBRACETOK {
trans_append(get_cur_loc_idx($1), get_cur_loc_idx($3), get_cur_act_idx($5));
free($1); free($3); free($5);
}
;
%%