Petriskript
PetriScript är ett modelleringsspråk för Petri-nät , designat av Alexandre Hamez och Xavier Renault. CPN -AMI- plattformen tillhandahåller många verktyg för att arbeta på Petri-nät, såsom verifierings- och modellkontrollverktyg.
Ursprungligen skapades enkla Petri-nät genom grafisk design , men forskning utförd internt på LIP6 visade att det behövdes för att automatisera sådana uppgifter. PetriScript designades för att tillhandahålla vissa faciliteter för modellering av platser-övergång och färgade Petri-nät inom CPN-AMI-plattformen. Petriscripts huvudsakliga syfte är att automatisera modelleringsoperationer på Petri-nät genom att slå samman, skapa och ansluta noder . Den stöder nästan allt som behövs, såsom makron , loopkontroll, listor och strängar och aritmetiska uttryck , och blockerar användarens ingripande så mycket som möjligt. Dess syntax är Ada-liknande .
Följande skript producerar en FIFO med tre sektioner:
0
define ( FIFO_SIZE , 3 ) define ( FIFO_BASE_X , 100 ) define ( FIFO_BASE_Y , 100 ) define ( FIFO_STEP , 120 ) int $ wave := ; för $ våg i 1. . FIFO_SIZE loop skapa plats "Slot_" & ' $ wave ' ( x FIFO_BASE_X + FIFO_STEP * $ wave , y FIFO_BASE_Y ); skapa plats "Empty_" & ' $ wave ' ( x FIFO_BASE_X + FIFO_STEP * $ wave , y FIFO_BASE_Y + 100 , markering "1" ); ändslinga ; _ för $ våg i 1. . FIFO_SIZE + 1 slinga skapar övergången "t" & ' $ wave - 1 ' & "_to_" & ' $ wave ' ( x FIFO_BASE_X + FIFO_STEP * $ wave - FIFO_STEP / 2 , y FIFO_BASE_Y + 50 ); om $ wave < FIFO_SIZE + 1 anslut sedan "1" övergång "t" & ' $ wave - 1 ' & "_to_" & ' $ wave ' för att placera "Slot_" & ' $ wave '; anslut "1" plats "Empty_" & ' $ wave ' till övergången "t" & ' $ wave - 1 ' & "_to_" & ' $ wave '; sluta om ; om $ wave > 1 anslut sedan "1" övergång "t" & ' $ wave - 1 ' & "_to_" & ' $ wave ' för att placera "Empty_" & ' $ wave - 1 '; anslut "1" placera "Slot_" & ' $ wave - 1 ' till övergången "t" & ' $ wave - 1 ' & "_to_" & ' $ wave '; sluta om ; ändslinga ; _ ställ in övergången "t0_to_1" till ( namn "FIFO_Start") ; ställ in övergången "t" & ' FIFO_SIZE ' & "_to_" & ' FIFO_SIZE + 1 ' till ( namn "FIFO_End" ) ;
Vilket ger följande graf :
Här är ett annat exempel som visar kraften i PetriScript:
0
0
0
definiera ( X , 250 ) definiera ( Y , 350 ) definiera ( radie , 50 ) definiera ( R , 150 ) definiera ( SECTIONS , 15 ) definiera ( INNER_ANGLE , 360 / SECTIONS ) define ( YTTRE_VINKEL / ( 2 ) * SECTION _ _ int $ i := ; int $ j := ; för $ i i 1. . SECTIONS loop skapa plats "F" & ' $ i ' ( x X , y Y , r radie , t $ i * INNER_ANGLE ); skapa plats "Section_" & ' $ i ' ( x X , y Y , r R , t $ i * INNER_ANGLE ); skapa övergången "t" & ' $ i ' & "_to_" & ' $ i mod SECTIONS + 1 ' ( x X , y Y , r R , t $ i * INNER_ANGLE + OUTTER_ANGLE ); ändslinga ; _ för $ i i 1. . SECTIONS loop anslut plats "Section_" & ' $ i ' till övergången "t" & ' $ i ' & "_to_" & ' $ i mod SECTIONS + 1 '; koppla övergång "t" & ' $ i ' & "_to_" & ' $ i mod SECTIONS + 1 ' för att placera "Section_" & ' $ i mod SECTIONS + 1 '; om $ i /= 1 anslut sedan plats "F" & ' $ i ' till övergången "t" & ' $ i - 1 ' & "_to_" & ' $ i '; annars anslut plats "F1" till övergången "t" & ' SECTIONS ' & "_to_" & ' 1 '; sluta om ; koppla övergången "t" & ' $ i mod SECTIONS + 1 ' & "_to_" & '( $ i + 1 ) mod SECTIONS + 1 ' för att placera "F" & ' $ i '; ändslinga ; _ för $ i i 1. . SECTIONS loop om $ i mod 3 = ställ sedan "Section_" & ' $ i ' till markering "1 " ; annars sätt "F" & ' $ i ' till markering "1 " ; sluta om ; ändslinga ; _
externa länkar
Fullständig dokumentation finns tillgänglig här .