Angielskifrancuskihiszpański

Ad


Ulubiona usługa OnWorks

gvpr - Online w chmurze

Uruchom gvpr w bezpłatnym dostawcy hostingu OnWorks w systemie Ubuntu Online, Fedora Online, emulatorze online systemu Windows lub emulatorze online systemu MAC OS

Jest to polecenie gvpr, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS

PROGRAM:

IMIĘ


gvpr - język skanowania i przetwarzania wzorów wykresów

STRESZCZENIE


gvpr [-icnqV?] [ -o plik wyjściowy ] [ -a args ] [ 'wałówka' | -f profil ] [ pliki ]

OPIS


gvpr (Poprzednio znany jako gpr) to edytor strumieni wykresów inspirowany Awk. Kopiuje dane wejściowe
wykresy na swój wynik, ewentualnie przekształcając ich strukturę i atrybuty, tworząc nowe
wykresy lub drukowanie dowolnych informacji. Model wykresu jest dostarczony przez
biblioteka(3). W szczególności, gvpr czyta i zapisuje wykresy przy użyciu języka kropkowego.

Gruntownie, gvpr przechodzi przez każdy wykres wejściowy, oznaczony przez $G, odwiedzając każdy węzeł i krawędź,
dopasowując go do reguł akcji predykatów dostarczonych w programie wejściowym. Zasady są
oceniane w kolejności. Dla każdego predykatu, który ma wartość true, odpowiada mu odpowiednia akcja
wykonane. Podczas przechodzenia aktualnie odwiedzany węzeł lub krawędź jest oznaczona przez $.

Dla każdego wykresu wejściowego istnieje podgraf docelowy, oznaczony przez $T, początkowo pusty i używany
do akumulowania wybranych jednostek i wykresu wyjściowego, $O, użyte do ostatecznej obróbki, a następnie
zapisane na wyjściu. Domyślnie wykresem wyjściowym jest wykres docelowy. Wykres wyjściowy
można ustawić w programie lub, w ograniczonym sensie, w wierszu poleceń.

OPCJE


Obsługiwane są następujące opcje:

-a args
Ciąg znaków args jest podzielony na tokeny oddzielone białymi znakami, z jednostką
tokeny dostępne jako ciągi znaków w pliku gvpr program jako ARGV[0],...,ARGV[ARGC-1].
Białe znaki w podciągach z pojedynczym lub podwójnym cudzysłowem lub poprzedzone znakiem a
ukośnik odwrotny, są ignorowane jako separatory. Ogólnie rzecz biorąc, znak odwrotnego ukośnika jest wyłączony
jakieś specjalne znaczenie następującego znaku. Należy pamiętać, że tokeny pochodzące z
wielokrotność -a flagi są łączone.

-c Użyj wykresu źródłowego jako wykresu wyjściowego.

-i Wyprowadź wywołane węzłem rozszerzenie podgrafu grafu wyjściowego w kontekście
jego wykres pierwiastkowy.

-o plik wyjściowy
Powoduje zapisanie strumienia wyjściowego do określonego pliku; domyślnie wyjściem jest
zapisywane stdout.

-f profil
Użyj zawartości określonego pliku jako programu do wykonania na wejściu. Jeśli
profil zawiera znak ukośnika, nazwa jest traktowana jako ścieżka do pliku.
Inaczej, gvpr użyje katalogów określonych w zmiennej środowiskowej
GVPRPATH aby wyszukać plik. Jeśli -f nie jest podany, gvpr użyje pierwszego nie-
argument opcji jako program.

-q Wyłącza komunikaty ostrzegawcze.

-n Wyłącza funkcję odczytu wykresu z wyprzedzeniem. Domyślnie zmienna $NG jest ustawiony na następny wykres
do przetworzenia. Wymaga to odczytania następnego wykresu przed przetworzeniem
bieżący wykres, który może zostać zablokowany, jeśli w odpowiedzi zostanie wygenerowany kolejny wykres
pewne działania związane z przetwarzaniem bieżącego wykresu.

-V Powoduje, że program wypisuje informacje o wersji i kończy działanie.

-? Powoduje, że program wypisze informacje o użyciu i zakończy działanie.

OPERANDY


Obsługiwany jest następujący operand:

pliki Nazwy plików zawierających 1 lub więcej wykresów w języku kropkowym. Jeśli nie -f opcja
zostanie podane, imię zostanie usunięte z listy i użyte jako program wejściowy.
Jeśli lista plików jest pusta, stdin będzie użyty.

PROGRAMY


A gvpr program składa się z listy klauzul predykatów-akcji, mających jedną z postaci:

ZACZYNAĆ { akcja }

BEG_G { akcja }

N [ orzec ] { akcja }

E [ orzec ] { akcja }

END_G { akcja }

KONIEC { akcja }

Program może zawierać co najwyżej po jednym z każdego z nich ZACZYNAĆ, END_G i KONIEC klauzule. Można
być dowolną liczbą BEG_G, N i E stwierdzenia, pierwsze odnosiło się do wykresów, drugie do
węzły, trzeci do krawędzi. Są one podzielone na bloki, blok składający się z
fakultatywny BEG_G oświadczenie i tyle N i E oświadczenia do następnego BEG_G stwierdzenie, jeśli
każdy. Semantyka najwyższego poziomu a gvpr program to:

Oceń ZACZYNAĆ klauzula, jeśli taka istnieje.
Dla każdego wykresu wejściowego G {
Dla każdego bloku {
Zestaw G jako bieżący wykres i bieżący obiekt.
Oceń BEG_G klauzula, jeśli taka istnieje.
Dla każdego węzła i krawędzi G {
Ustaw węzeł lub krawędź jako bieżący obiekt.
Oceń N or E klauzule, stosownie do przypadku.
}
}
Zestaw G jako bieżący obiekt.
Oceń END_G klauzula, jeśli taka istnieje.
}
Oceń KONIEC klauzula, jeśli taka istnieje.

Działania ZACZYNAĆ, BEG_G, END_G i KONIEC klauzule są wykonywane, gdy klauzule są
oceniane. Dla N or E klauzule, można pominąć predykat lub akcję. Jezeli tam
nie ma predykatu z akcją, akcja jest wykonywana na każdym węźle lub krawędzi, jak np
odpowiedni. Jeśli nie ma żadnej akcji, a predykat ma wartość true, powiązane
węzeł lub krawędź została dodana do wykresu docelowego.

Bloki są oceniane w kolejności, w jakiej występują. W obrębie bloku, N klauzule
(E klauzule) są oceniane w kolejności, w jakiej występują. Uwaga jednak,
że w bloku N or E klauzule mogą być przeplatane, w zależności od kolejności przechodzenia.

Predykaty i akcje to sekwencje instrukcji w dialekcie C obsługiwane przez
expr(3) biblioteka. Jedyna różnica między predykatami a działaniami polega na tym, że to pierwsze
musi mieć typ, który można zinterpretować jako prawdziwy lub fałszywy. Tutaj zwykłe C
stosowana jest konwencja, w której wartość niezerową uważa się za prawdziwą. To obejmowałoby
niepuste ciągi znaków i niepuste odniesienia do węzłów, krawędzi itp. Jeśli jednak ciąg może
zostanie przekonwertowany na liczbę całkowitą, zostanie użyta ta wartość.

Oprócz zwykłych typów podstawowych C (unieważnić, int, zwęglać, unosić się, długie, unsigned i Podwójna),
gvpr zapewnia ciąg jako synonim zwęglać*i typy oparte na grafach węzeł_t, krawędź_t,
wykres_t i obj_t, obj_t typ można postrzegać jako nadtyp pozostałych trzech betonów
typy; prawidłowy typ podstawowy jest utrzymywany dynamicznie. Oprócz tych typów podstawowych,
tylko inne obsługiwane wyrażenia typu są tablicami (asocjacyjnymi).

Stałe są zgodne ze składnią C, ale ciągi znaków mogą być cytowane w obu przypadkach „…” or "...". gvpr
akceptuje komentarze C++, a także komentarze typu cpp. W tym drugim przypadku, jeśli linia zaczyna się od
znak „#”, reszta linii jest ignorowana.

Instrukcja może być deklaracją funkcji, zmiennej, tablicy lub pliku wykonywalnego
oświadczenie. W przypadku deklaracji istnieje jeden zakres. Deklaracje tablic mają postać:

rodzaj szyk [ type0 ]

gdzie type0 jest opcjonalne. Jeśli zostanie podany, parser wymusi tę całą tablicę
indeksy dolne mają określony typ. Jeśli nie jest dostarczony, mogą to być obiekty wszystkich typów
używane jako indeksy dolne. Podobnie jak w C, zmienne i tablice muszą być zadeklarowane. W szczególności an
niezadeklarowana zmienna będzie interpretowana jako nazwa atrybutu węzła, krawędzi lub
wykres, w zależności od kontekstu.

Instrukcje wykonywalne mogą być jedną z następujących czynności:

{ [ oświadczenie ... ] }
wyrażenie //powszechnie było = wyrażenie
gdyby( wyrażenie ) oświadczenie [ więcej oświadczenie ]
dla( wyrażenie ; wyrażenie ; wyrażenie ) oświadczenie
dla( szyk [ było ]) oświadczenie
dla( szyk [ było ]) oświadczenie
podczas ( wyrażenie ) oświadczenie
przełącznik( wyrażenie ) walizka oświadczenia
złamać [ wyrażenie ]
kontynuować [ wyrażenie ]
powrót [ wyrażenie ]
Pozycje w nawiasach są opcjonalne.

W drugiej formie dla oświadczenie i dla instrukcja, zmienna było jest ustawione na
każda wartość używana jako indeks w określonej tablicy, a następnie powiązana oświadczenie is
oceniane. W przypadku indeksów liczbowych i łańcuchowych indeksy są zwracane w formie rosnącej
(malejący) porządek numeryczny lub leksykograficzny dla (dlaodpowiednio). Można to wykorzystać
do sortowania.

Definicje funkcji mogą pojawiać się tylko w pliku ZACZYNAĆ klauzula.

Wyrażenia obejmują typowe wyrażenia języka C. Porównania ciągów za pomocą == i != traktować
prawy operand jako wzorzec na potrzeby dopasowywania wyrażeń regularnych. Wzory
posługiwać się ksh(1) składnia wzorca dopasowania pliku. (Aby uzyskać prostą równość ciągów, użyj metody strcmp
funkcja.

gvpr spróbuje użyć wyrażenia jako ciągu znaków lub wartości numerycznej, stosownie do potrzeb. Obydwa
Rzuty i szablony funkcji podobne do języka C spowodują, jeśli to możliwe, wykonanie konwersji.

Wyrażenia typu graficznego (tj. wykres_t, węzeł_t, krawędź_t, obj_t) może nastąpić a
odnośnik do pola w formie .Nazwa. Wynikowa wartość jest wartością atrybutu
o imieniu Nazwa danego obiektu. Ponadto w niektórych kontekstach niezadeklarowane,
niezmodyfikowany identyfikator jest uważany za nazwę atrybutu. Konkretnie takie identyfikatory
oznaczają odpowiednio atrybuty bieżącego węzła lub krawędzi N i E klauzule i
aktualny wykres w BEG_G i END_G klauzule.

Jak zwykle w biblioteka(3) model, atrybuty mają wartość łańcuchową. Ponadto, gvpr
obsługuje pewne pseudoatrybuty obiektów wykresów, niekoniecznie o wartościach łańcuchowych. Te
odzwierciedlają wewnętrzne właściwości obiektów wykresu i nie mogą być ustawiane przez użytkownika.

głowa : węzeł_t
czoło krawędzi.

ogon : węzeł_t
ogon krawędzi.

Nazwa : ciąg
nazwa krawędzi, węzła lub wykresu. Nazwa krawędzi ma postać „<ogon-
imię>[]", gdzie jest "->"Lub"--" zależy od
czy graf jest skierowany czy nie. Część wspornika [] pojawia się tylko wtedy, gdy
Edge ma nietrywialny klucz.

stopień : int
stopień węzła.

stopień naukowy : int
stopień zewnętrzny węzła.

stopień : int
stopień węzła.

korzeń : wykres_t
wykres pierwiastkowy obiektu. Korzeń grafu pierwiastkowego jest sam w sobie.

roślina mateczna : wykres_t
wykres nadrzędny podgrafu. Rodziciem grafu pierwiastkowego jest NULL

n_krawędzi : int
liczba krawędzi w grafie

n_węzłów : int
liczba węzłów na grafie

skierowany : int
prawda (niezerowa), jeśli graf jest skierowany

rygorystyczny : int
prawda (niezerowa), jeśli wykres jest ścisły

WBUDOWANE FUNKCJE


Wbudowane są następujące funkcje gvpr. Te funkcje zwracające odniesienia do wykresu
obiekty powracają NULL w przypadku awarii.

Wykresy i podpunkt
wykres(s : ciąg, t : ciąg) wykres_t
tworzy wykres o nazwie s i którego typ jest określony przez ciąg t.
Ignorując wielkość liter i znaki U, D, S, N mieć interpretację nieukierunkowaną,
odpowiednio ukierunkowane, rygorystyczne i nierygorystyczne. Jeśli t jest pusty, ukierunkowany, nie-
generowany jest ścisły wykres.

podst(g : wykres_t, s : ciąg) wykres_t
tworzy podgraf na wykresie g z imieniem s. Jeśli podgraf już istnieje, to tak
zwrócony.

jestPod(g : wykres_t, s : ciąg) wykres_t
zwraca podgraf na wykresie g z imieniem s, jeśli istnieje, lub NULL Inaczej.

fstsubg(g : wykres_t) wykres_t
zwraca pierwszy podgraf na wykresie glub NULL jeśli żaden nie istnieje.

nxtsubg(sg : wykres_t) wykres_t
zwraca następny akapit po sglub NULL.

jestBezpośredni(g : wykres_t) int
zwraca wartość true wtedy i tylko wtedy, gdy g jest skierowany.

jestStrict(g : wykres_t) int
zwraca wartość true wtedy i tylko wtedy, gdy g jest surowa.

nWęzły(g : wykres_t) int
zwraca liczbę węzłów w g.

krawędzie(g : wykres_t) int
zwraca liczbę krawędzi g.

Węzły
węzeł(sg : wykres_t, s : ciąg) węzeł_t
tworzy węzeł na grafie g imienny s. Jeśli taki węzeł już istnieje, jest zwracany.

podwęzeł(sg : wykres_t, n : węzeł_t) węzeł_t
wstawia węzeł n w podpunkt g. Zwraca węzeł.

pierwszy węzeł(g : wykres_t) węzeł_t
zwraca pierwszy węzeł na wykresie glub NULL jeśli żaden nie istnieje.

nxtnode(n : węzeł_t) węzeł_t
zwraca następny węzeł po n na wykresie głównym, lub NULL.

nxtnode_sg(sg : wykres_t, n : węzeł_t) węzeł_t
zwraca następny węzeł po n in sglub NULL.

jestWęzeł(sg : wykres_t, s : ciąg) węzeł_t
szuka węzła na (pod)grafie sg imienny s. Jeśli taki węzeł istnieje, jest zwracany.
Inaczej, NULL jest zwracany.

isPodwęzeł(sg : wykres_t, n : węzeł_t) int
zwraca wartość różną od zera, jeśli węzeł n jest na (pod)grafie sglub zero w przeciwnym razie.

stopieńO(sg : wykres_t, n : węzeł_t) int
zwraca stopień węzła n na (pod)grafie sg.

out DegreeOf(sg : wykres_t, n : węzeł_t) int
zwraca stopień zewnętrzny węzła n na (pod)grafie sg.

stopień(sg : wykres_t, n : węzeł_t) int
zwraca stopień węzła n na (pod)grafie sg.

Krawędzie
krawędź(t : węzeł_t, h : węzeł_t, s : ciąg) krawędź_t
tworzy krawędź z węzłem końcowym t, węzeł główny h i imię s na grafie głównym. Jeśli
wykres jest nieskierowany, rozróżnienie między węzłami głównymi i końcowymi jest nieistotne.
Jeśli taka krawędź już istnieje, jest zwracana.

krawędź_sg(sg : wykres_t, t : węzeł_t, h : węzeł_t, s : ciąg) krawędź_t
tworzy krawędź z węzłem końcowym t, węzeł główny h i imię s na (pod)grafie sg (i wszystkie
wykresy nadrzędne). Jeśli wykres jest nieukierunkowany, rozróżnienie między głową a ogonem
węzły są nieistotne. Jeśli taka krawędź już istnieje, jest zwracana.

podkrawędź(g : wykres_t, e : krawędź_t) krawędź_t
wstawia krawędź e w podpunkt g. Zwraca krawędź.

jestEdge(t : węzeł_t, h : węzeł_t, s : ciąg) krawędź_t
szuka krawędzi z węzłem końcowym t, węzeł główny h i imię s. Jeśli wykres to
nieukierunkowany, rozróżnienie między węzłami głównymi i ogonowymi jest nieistotne. Jeśli taki
krawędź istnieje, jest zwracana. W przeciwnym razie, NULL jest zwracany.

isEdge_sg(sg : wykres_t, t : węzeł_t, h : węzeł_t, s : ciąg) krawędź_t
szuka krawędzi z węzłem końcowym t, węzeł główny h i imię s na (pod)grafie sg, Jeśli
wykres jest nieskierowany, rozróżnienie między węzłami głównymi i końcowymi jest nieistotne.
Jeśli taka krawędź istnieje, jest zwracana. W przeciwnym razie, NULL jest zwracany.

jest Subedge(g : wykres_t, e : krawędź_t) int
zwraca wartość różną od zera, jeśli Edge e jest na (pod)grafie sglub zero w przeciwnym razie.

fstout(n : węzeł_t) krawędź_t
zwraca pierwsze przekroczenie węzła n na grafie głównym.

fstout_sg(sg : wykres_t, n : węzeł_t) krawędź_t
zwraca pierwsze przekroczenie węzła n na (pod)grafie sg.

nxtout(e : krawędź_t) krawędź_t
zwraca następne przekroczenie po e na grafie głównym.

nxtout_sg(sg : wykres_t, e : krawędź_t) krawędź_t
zwraca następne przekroczenie po e na wykresie sg.

fstin(n : węzeł_t) krawędź_t
zwraca pierwszą krawędź węzła n na grafie głównym.

fstin_sg(sg : wykres_t, n : węzeł_t) krawędź_t
zwraca pierwszą krawędź węzła n na wykresie sg.

nxtin(e : krawędź_t) krawędź_t
zwraca następną krawędź po e na grafie głównym.

nxtin_sg(sg : wykres_t, e : krawędź_t) krawędź_t
zwraca następną krawędź po e na wykresie sg.

fstedge(n : węzeł_t) krawędź_t
zwraca pierwszą krawędź węzła n na grafie głównym.

fstedge_sg(sg : wykres_t, n : węzeł_t) krawędź_t
zwraca pierwszą krawędź węzła n na wykresie sg.

nxtedge(e : krawędź_t, węzeł_t) krawędź_t
zwraca następną krawędź po e na grafie głównym.

nxtedge_sg(sg : wykres_t, e : krawędź_t, węzeł_t) krawędź_t
zwraca następną krawędź po e na wykresie sg.

opp(e : krawędź_t, węzeł_t) węzeł_t
zwraca węzeł na krawędzi e nie równa się n. Zwraca NULL jeśli n nie jest węzłem
e. Może to być przydatne podczas używania fstedge i nxtedge wyliczyć sąsiadów
n.

Wykres I / O
napisać(g : wykres_t) unieważnić
wydruki g w formacie kropkowym na strumień wyjściowy.

napiszG(g : wykres_t, nazwa użytkownika : ciąg) unieważnić
wydruki g w formacie kropkowym do pliku nazwa użytkownika.

napiszG(g : wykres_t, fd : int) unieważnić
wydruki g w formacie kropkowym na otwarty strumień oznaczony liczbą całkowitą fd.

czytajG(nazwa użytkownika : ciąg) wykres_t
zwraca wykres odczytany z pliku nazwa użytkownika. Wykres powinien mieć format kropkowy. Jeśli nie
wykres można odczytać, NULL jest zwracany.

freadG(fd : int) wykres_t
zwraca następny wykres odczytany z otwartego strumienia fd. Zwroty NULL na końcu pliku.

Wykres zbieranina
usunąć(g : wykres_t, x : obj_t) unieważnić
usuwa obiekt x z wykresu g. Jeśli g is NULL, funkcja korzysta z wykresu pierwiastkowego
x. Jeśli x jest wykresem lub podgrafem, jest zamknięty, chyba że x jest zamknięte.

jest w(g : wykres_t, x : obj_t) int
zwraca wartość true, jeśli x jest w podpunkcie g.

klonG(g : wykres_t, s : ciąg) wykres_t
tworzy klon wykresu g o imieniu s. Jeśli s jest „”, utworzony wykres ma
takie samo imię jak g.

klonować(g : wykres_t, x : obj_t) obj_t
tworzy klon obiektu x na wykresie g. W szczególności nowy obiekt ma to samo
nazwa/wartość, atrybuty i struktura jako obiekt oryginalny. Jeśli obiekt z
ten sam klucz co x już istnieje, na jego atrybuty nakładają się atrybuty x oraz
obiekt jest zwracany. Jeśli krawędź zostanie sklonowana, oba punkty końcowe zostaną niejawnie sklonowane.
Jeśli graf zostanie sklonowany, wszystkie węzły, krawędzie i podgrafy zostaną niejawnie sklonowane. Jeśli x
jest wykresem, g może być NULL, w takim przypadku sklonowany obiekt będzie nowym rootem
wykres. W tym przypadku wywołanie jest równoznaczne z klonG(x,,").

kopia(g : wykres_t, x : obj_t) obj_t
tworzy kopię obiektu x na wykresie g, gdzie nowy obiekt ma tę samą nazwę/wartość
atrybuty jak obiekt oryginalny. Jeśli obiekt z tym samym kluczem co x już
istnieje, na jego atrybuty nakładają się atrybuty x i obiekt zostaje zwrócony. Notatka
że jest to płytka kopia. Jeśli x jest grafem, a nie żadnym z jego węzłów, krawędzi ani podgrafów
są kopiowane do nowego wykresu. Jeśli x jest krawędzią, punkty końcowe są tworzone, jeśli
konieczne, ale nie są klonowane. Jeśli x jest wykresem, g może być NULL, w którym to przypadku
sklonowany obiekt będzie nowym wykresem głównym.

kopiaA(src : obj_t, tgt : obj_t) int
kopiuje atrybuty obiektu src sprzeciwiać się tgt, zastępując wszelkie wartości atrybutów
tgt może początkowo mieć.

spowodować(g : wykres_t) unieważnić
rozciąga się g do wywołanego przez węzeł rozszerzenia podgrafu na grafie głównym.

maAttr(src : obj_t, Nazwa : ciąg) int
zwraca wartość różną od zera, jeśli obiekt src ma atrybut o nazwie Nazwa. Zwraca 0
Inaczej.

isAttr(g : wykres_t, uprzejmy : ciąg, Nazwa : ciąg) int
zwraca wartość różną od zera, jeśli atrybut Nazwa zostało zdefiniowane w g dla obiektów
dany uprzejmy. W przypadku węzłów, krawędzi i wykresów uprzejmy powinno być „N”, „E” i „G”,
odpowiednio. W przeciwnym razie zwraca 0.

wiek(src : obj_t, Nazwa : ciąg) ciąg
zwraca wartość atrybutu Nazwa w obiekcie src. Jest to przydatne w takich przypadkach
jeśli chodzi o komunikację i motywację Nazwa koliduje z jednym ze słów kluczowych, np. „head” lub „root”. Jeśli
atrybut nie został zadeklarowany na grafie, funkcja zainicjuje go
wartość domyślna „”. Aby tego uniknąć, warto skorzystać z tzw maAttr or isAttr funkcjonować
aby sprawdzić, czy atrybut istnieje.

zbiór(src : obj_t, Nazwa : ciąg, wartość : ciąg) int
ustawia wartość atrybutu Nazwa w obiekcie src do wartość. Zwraca 0 w przypadku sukcesu,
niezerowe w przypadku awarii. Widzieć wiek powyżej.

pobierzDflt(g : wykres_t, uprzejmy : ciąg, Nazwa : ciąg) ciąg
zwraca domyślną wartość atrybutu Nazwa w obiektach w g danego uprzejmy. Forum
węzły, krawędzie i wykresy, uprzejmy powinno wynosić odpowiednio „N”, „E” i „G”. Jeśli
atrybut nie został zadeklarowany na grafie, funkcja zainicjuje go
wartość domyślna „”. Aby tego uniknąć, warto skorzystać z tzw isAttr funkcja do sprawdzenia
że atrybut istnieje.

ustawDflt(g : wykres_t, uprzejmy : ciąg, Nazwa : ciąg, wartość : ciąg) int
ustawia domyślną wartość atrybutu Nazwa do wartość w obiektach w g danego
uprzejmy. W przypadku węzłów, krawędzi i wykresów uprzejmy powinno wynosić odpowiednio „N”, „E” i „G”.
Zwraca 0 w przypadku powodzenia, wartość różną od zera w przypadku niepowodzenia. Widzieć pobierzDflt powyżej.

fstAttr(g : wykres_t, uprzejmy : ciąg) ciąg
zwraca nazwę pierwszego atrybutu obiektów w g danego uprzejmy. Forum
węzły, krawędzie i wykresy, uprzejmy powinno wynosić odpowiednio „N”, „E” i „G”. Jezeli tam
nie ma żadnych atrybutów, zwracany jest ciąg „”.

nxtAttr(g : wykres_t, uprzejmy : ciąg, Nazwa : ciąg) ciąg
zwraca nazwę następnego atrybutu obiektów w g danego uprzejmy po
atrybut Nazwa. Argument Nazwa musi być nazwą istniejącego atrybutu; To
zazwyczaj będzie wartością zwracaną przez poprzednie wywołanie fstAttr or nxtAttr. Forum
węzły, krawędzie i wykresy, uprzejmy powinno wynosić odpowiednio „N”, „E” i „G”. Jezeli tam
nie ma już żadnych atrybutów, zwracany jest ciąg „”.

kompOf(g : wykres_t, n : węzeł_t) wykres_t
zwraca połączony komponent grafu g zawierający węzeł n, jako podgraf
g. Podgraf zawiera tylko węzły. Można skorzystać spowodować aby dodać krawędzie. The
funkcja kończy się niepowodzeniem i powraca NULL if n nie jest w g. Łączność opiera się na
bazowy nieskierowany graf g.

rodzaj(Obj : obj_t) ciąg
zwraca informację o typie Obj. W przypadku węzłów, krawędzi i wykresów zwraca wartość
Odpowiednio „N”, „E” i „G”.

zablokować(g : wykres_t, v : int) int
implementuje blokowanie wykresów na wykresach głównych. Jeśli liczba całkowita v jest dodatni, wykres jest
ustaw tak, aby przyszłe połączenia dotyczyły usunąć nie mają natychmiastowego skutku. Jeśli v jest zero,
wykres jest odblokowany. Jeśli pojawiło się wezwanie do usunięcia wykresu, gdy był
zablokowane, wykres jest zamknięty. Jeśli v jest negatywny, nic się nie robi. We wszystkich przypadkach
zwracana jest poprzednia wartość blokady.

Smyczki
sprint(fmt : ciąg, ...) ciąg
zwraca ciąg znaków powstały w wyniku formatowania wartości wyrażeń
występujące po fmt według printf(3) formacie fmt

gsub(str : ciąg, klepnięcie : ciąg) ciąg

gsub(str : ciąg, klepnięcie : ciąg, zastępstwo : ciąg) ciąg
powraca str z dopasowaniem wszystkich podciągów klepnięcie usunięte lub zastąpione przez zastępstwo,
odpowiednio.

poniżej(str : ciąg, klepnięcie : ciąg) ciąg

poniżej(str : ciąg, klepnięcie : ciąg, zastępstwo : ciąg) ciąg
powraca str z dopasowaniem skrajnego lewego podciągu klepnięcie usunięte lub zastąpione przez zastępstwo,
odpowiednio. Na początku i na końcu można używać znaków „^” i „$”,
odpowiednio, z klepnięcie aby zakotwiczyć wzór na początku lub na końcu str.

podstr(str : ciąg, idx : int) ciąg

podstr(str : ciąg, idx : int, len : int) ciąg
zwraca podciąg str zaczynając od pozycji idx na koniec ciągu lub
długości lenodpowiednio. Indeksowanie rozpoczyna się od 0. Jeśli idx jest ujemny lub idx is
większa niż długość str, pojawia się błąd krytyczny. Podobnie w drugim
przypadek, jeśli len jest ujemny lub idx + len jest większa od długości str, śmiertelny
występuje błąd.

strcmp(s1 : ciąg, s2 : ciąg) int
udostępnia standardową funkcję C strcmp(3).

długość(s : ciąg) int
zwraca długość ciągu s.

wskaźnik(s : ciąg, t : ciąg) int

skakać(s : ciąg, t : ciąg) int
zwraca indeks znaku w ciągu s gdzie skrajna lewa (prawa) kopia
sznurka t można znaleźć, lub -1 jeśli t nie jest podciągiem s.

mecz(s : ciąg, p : ciąg) int
zwraca indeks znaku w ciągu s gdzie skrajne lewe dopasowanie wzorca
p można znaleźć, lub -1, jeśli nie ma podciągu s zapałki p.

nakładka(s : ciąg) ciąg
zwraca wersję s ze znakami alfabetu zamienionymi na wielkie.

obniżyć(s : ciąg) ciąg
zwraca wersję s ze znakami alfabetu zamienionymi na małe.

kanon(s : ciąg) ciąg
zwraca wersję s odpowiedni do użycia jako identyfikator w pliku kropkowym.

html(g : wykres_t, s : ciąg) ciąg
zwraca „magiczną” wersję s jako ciąg HTML. Zwykle będzie to do tego przyzwyczajone
dołącz etykietę przypominającą HTML do obiektu wykresu. Zauważ, że zwrócony ciąg znaków jest obecny
g. W szczególności zostanie uwolniony, gdy g jest zamknięty i działa jak ciąg HTML,
należy go używać z przedmiotem g. Ponadto należy pamiętać, że nawias kątowy
cytaty nie powinny być częścią s. Zostaną one dodane, jeśli g jest napisane konkretną kropką
Format.

ishtml(s : ciąg) int
zwraca wartość różną od zera wtedy i tylko wtedy, gdy s jest ciągiem HTML.

xOf(s : ciąg) ciąg
zwraca ciąg znaków „x" Jeśli s ma postać „x,y", gdzie oba x i y są numeryczne.

ty(s : ciąg) ciąg
zwraca ciąg znaków „y" Jeśli s ma postać „x,y", gdzie oba x i y są numeryczne.

llOf(s : ciąg) ciąg
zwraca ciąg znaków „llx,Lly" Jeśli s ma postać „llx,Lly,urx,Ury", gdzie wszystko llx,
Lly, urx, Ury są numeryczne.

ur(s)
urOf(s : ciąg) ciąg zwraca ciąg znaków „urx,Ury" Jeśli s ma formę
"llx,Lly,urx,Ury", gdzie wszystko llx, Lly, urx, Ury są numeryczne.

skanf(s : ciąg, fmt : ciąg, ...) int
skanuje ciąg s, wyodrębnianie wartości zgodnie z skanf(3) formacie fmt,
wartości są przechowywane pod następującymi adresami fmt, adresy posiadające postać &v,
gdzie v jest jakąś zadeklarowaną zmienną odpowiedniego typu. Zwraca liczbę elementów
pomyślnie przeskanowane.

dzielić(s : ciąg, arr : szyk, sepsy : ciąg) int

dzielić(s : ciąg, arr : szyk) int

tokeny(s : ciąg, arr : szyk, sepsy : ciąg) int

tokeny(s : ciąg, arr : szyk) int
Połączenia dzielić funkcja przerywa ciąg s na pola, podczas gdy tokeny funkcjonować
dzieli ciąg na tokeny. Pole składa się ze wszystkich znaków nieseparatorowych
pomiędzy dwoma znakami separatora lub początkiem lub końcem ciągu. Zatem,
pole może być pustym ciągiem. Token jest maksymalnym, niepustym podciągiem
zawierający znak separatora. Znaki oddzielające to te podane w pliku
sepsy argument. Gdyby sepsy nie jest podany, wartością domyślną jest „\t\n”. The
funkcje zwracają liczbę pól lub tokenów.

Pola i tokeny są przechowywane w tablicy argumentów. Tablica musi być ciąg-
ma wartość i jeśli określono typ indeksu, musi tak być int. Wpisy są indeksowane
przez kolejne liczby całkowite, zaczynając od 0. Wszystkie wartości już zapisane w tablicy zostaną zmienione
zostać nadpisane lub nadal występować po powrocie funkcji.

I / O
(...) unieważnić
wydrukować( expr, ... ) wypisuje kolejno ciąg reprezentujący każdy argument
stdout, po którym następuje znak nowej linii.

printf(fmt : ciąg, ...) int

printf(fd : int, fmt : ciąg, ...) int
wypisuje ciąg znaków powstały w wyniku formatowania wartości następujących wyrażeń
fmt według printf(3) formacie fmt. Zwraca 0 w przypadku powodzenia. Domyślnie to
drukuje dalej stdout. Jeśli opcjonalna liczba całkowita fd jest podany, wynik jest zapisywany na
otwarty strumień powiązany z fd.

skanf(fmt : ciąg, ...) int

skanf(fd : int, fmt : ciąg, ...) int
skanuje wartości ze strumienia wejściowego zgodnie z skanf(3) formacie fmt,
wartości są przechowywane pod następującymi adresami fmt, adresy posiadające postać &v,
gdzie v jest jakąś zadeklarowaną zmienną odpowiedniego typu. Domyślnie czyta z
stdin. Jeśli opcjonalna liczba całkowita fd jest podany, dane wejściowe są odczytywane z otwartego strumienia
związany z fd. Zwraca liczbę pomyślnie przeskanowanych elementów.

otwarteF(s : ciąg, t : ciąg) int
otwiera plik s jako strumień we/wy. Argument ciągu t określa, jaki jest plik
otwierany. Argumenty są takie same jak w przypadku funkcji C otwarty(3). Zwraca
liczba całkowita oznaczająca strumień lub -1 w przypadku błędu.

Jak zwykle strumienie 0, 1 i 2 są już otwarte jako stdin, stdout, stderr,
odpowiednio. Odkąd gvpr może użyć stdin aby przeczytać wykresy wejściowe, użytkownik powinien
unikaj korzystania z tego strumienia.

zamknijF(fd : int) int
zamyka otwarty strumień oznaczony liczbą całkowitą fd. Strumienie 0, 1 i 2 nie mogą być
Zamknięte. Zwraca 0 w przypadku powodzenia.

czytajL(fd : int) ciąg
zwraca następną linię odczytaną ze strumienia wejściowego fd. Zwraca pusty ciąg znaków „”
na końcu pliku. Należy pamiętać, że w zwracanym ciągu znaków pozostaje znak nowej linii.

matematyka
exp(d : Podwójna) Podwójna
zwraca e do dmoc.

log(d : Podwójna) Podwójna
zwraca logarytm naturalny d.

kwadrat(d : Podwójna) Podwójna
zwraca pierwiastek kwadratowy z liczby podwójnej d.

pow(d : Podwójna, x : Podwójna) Podwójna
powraca d podniesiony do xmoc.

cos(d : Podwójna) Podwójna
zwraca cosinus d.

grzech(d : Podwójna) Podwójna
zwraca sinus d.

atan2(y : Podwójna, x : Podwójna) Podwójna
zwraca arcustangens y / x w zakresie -pi do pi.

MIN(y : Podwójna, x : Podwójna) Podwójna
zwraca minimum y i x.

MAX(y : Podwójna, x : Podwójna) Podwójna
zwraca maksimum y i x.

Asocjacyjny Tablice
# arr : int
zwraca liczbę elementów w tablicy arr.

idx in arr : int
zwraca 1, jeśli dla indeksu ustawiono wartość idx w tablicy arr. Zwraca 0
Inaczej.

rozbrojony(v : szyk, idx) int
usuwa element indeksowany przez idx. Zwraca 1, jeśli element istniał, 0 w przeciwnym razie.

rozbrojony(v : szyk) unieważnić
ponownie inicjuje tablicę.

Różne
wyjście(v : int) unieważnić
Przyczyny gvpr aby wyjść za pomocą kodu wyjścia v.

system(cmd : ciąg) int
udostępnia standardową funkcję C system(3). To wykonuje cmd w powłoce użytkownika
środowisku i zwraca status wyjścia powłoki.

rand() : Podwójna
zwraca pseudolosowy wynik double z zakresu od 0 do 1.

srand() : int

srand(v : int) int
ustawia ziarno generatora liczb losowych. Opcjonalny argument daje ziarno;
jeśli zostanie pominięty, zostanie użyty aktualny czas. Zwracana jest poprzednia wartość początkowa.
srand należy zadzwonić przed wykonaniem jakichkolwiek połączeń rand.

kolorx(kolor : ciąg, fmt : ciąg) ciąg
tłumaczy kolor z jednego formatu na inny. The kolor argumentem powinien być kolor
w jednej z rozpoznanych reprezentacji łańcuchowych. The fmt wartość powinna być jedną z
„RGB”, „RGBA”, „HSV” lub „HSVA”. W przypadku błędu zwracany jest pusty ciąg znaków.

WBUDOWANE ZMIENNE


gvpr udostępnia pewne specjalne, wbudowane zmienne, których wartości są ustawiane automatycznie przez
gvpr w zależności od kontekstu. O ile nie zaznaczono inaczej, użytkownik nie może modyfikować ich wartości.

$ : obj_t
oznacza bieżący obiekt (węzeł, krawędź, wykres) w zależności od kontekstu. Nie jest
dostępne w ZACZYNAĆ or KONIEC klauzule.

$F : ciąg
to nazwa bieżącego pliku wejściowego.

$G : wykres_t
oznacza aktualnie przetwarzany wykres. Nie jest dostępny w ZACZYNAĆ or KONIEC
klauzule.

$NG : wykres_t
oznacza następny wykres do przetworzenia. Jeśli $NG ma wartość NULL, bieżący wykres $G jest
ostatni wykres. Zauważ, że jeśli dane wejściowe pochodzą ze standardowego wejścia, ostatni wykres nie może być
ustalana do momentu zamknięcia rury wlotowej. Nie jest dostępny w ZACZYNAĆ or KONIEC
klauzule, lub jeżeli -n używana jest flaga.

$O : wykres_t
oznacza wykres wyjściowy. Przed przejściem po grafie jest on inicjowany do celu
wykres. Po przejściu i dowolnym END_G akcje, jeśli odnosi się do niepustego wykresu,
ten wykres jest drukowany na strumieniu wyjściowym. Obowiązuje tylko w N, E i END_G
klauzule. Wykres wyjściowy może być ustawiony przez użytkownika.

$T : wykres_t
oznacza bieżący wykres docelowy. Jest to podgraf $G i jest dostępny tylko w
N, E i END_G klauzule.

$nazwa_tgt : ciąg
oznacza nazwę wykresu docelowego. Domyślnie jest ustawiony na „wynik_gvpr”. Jeśli
użyte wielokrotnie podczas wykonywania gvpr, nazwa zostanie dodana przez
liczba całkowita. Zmienna ta może być ustawiona przez użytkownika.

$tvroot : węzeł_t
wskazuje węzeł początkowy dla (skierowanego lub nieskierowanego) głębokości lub szerokości
pierwsze przejście przez graf (por. $typ telewizora poniżej). Wartość domyślna to NULL dla
każdy wykres wejściowy. Po przejściu do danego pierwiastka, jeśli wartość $tvroot
uległa zmianie, nowe przejście rozpocznie się z nową wartością $tvroot. Także ustaw
$tvnext poniżej.

$tvnext : węzeł_t
wskazuje następny węzeł początkowy dla (skierowanego lub nieskierowanego) pierwszego w głąb lub
przechodzenie przez graf wszerz (por. $typ telewizora poniżej). Jeśli przejście się zakończy
oraz $tvroot nie został zresetowany, ale $tvnext zostało ustawione, ale nie zostało użyte, to
węzeł zostanie użyty jako następny wybór dla $tvroot. Domyślna wartość to NULL dla
każdy wykres wejściowy.

$tvedge : krawędź_t
W przypadku przejść BFS i DFS jest to wartość zbocza używanego do osiągnięcia prądu
węzeł lub krawędź. Na początku przechodzenia lub w przypadku innych typów przechodzenia,
wartosc jest NULL.

$typ telewizora : typ_tv
wskazuje jak gvpr przemierza wykres. Może przyjmować tylko jedną ze stałych wartości
z przedrostkiem „TV_” opisanym poniżej. Telewizor_mieszkanie jest wartością domyślną.

W podstawowej bibliotece wykresów cgraf(3), krawędzie grafów nieskierowanych mają postać an
dowolny kierunek. Służy do przechodzenia, np TV_dalej, wymagające
skierowane krawędzie.

ARGC : int
oznacza liczbę argumentów określonych przez -a args argument wiersza poleceń.

ARGV : ciąg szyk
oznacza tablicę argumentów określoną przez -a args argument wiersza poleceń. The
iargument jest podany przez ARGV[i].

WBUDOWANE STAŁE


Istnieje kilka stałych symbolicznych zdefiniowanych przez gvpr.

NULL : obj_t
odwołanie do obiektu zerowego, równoważne 0.

Telewizor_mieszkanie : typ_tv
proste, płaskie przechodzenie, z obiektami wykresu odwiedzanymi w pozornie dowolnej kolejności.

TV_ne : typ_tv
przejście, które najpierw odwiedza wszystkie węzły, a następnie wszystkie krawędzie.

TV_en : typ_tv
przejście, które najpierw odwiedza wszystkie krawędzie, a następnie wszystkie węzły.

TV_dfs : typ_tv
TV_postdfs : typ_tv
TV_prepostdfs : typ_tv
przechodzenie przez graf przy użyciu przeszukiwania w głąb, nieukierunkowanego
wykres. Aby wykonać przeprawę, gvpr sprawdzi wartość $tvroot. Jeśli to ma
tę samą wartość, którą miał poprzednio (na początku inicjowana jest poprzednia wartość
do NULL.), gvpr po prostu wyszuka jakiś nieodwiedzony węzeł i przejdzie przez niego podłączony
część. Z drugiej strony, jeśli $tvroot uległ zmianie, jego podłączony komponent tak się stanie
zwiedzać, zakładając, że nie było wcześniej odwiedzane lub, jeśli $tvroot is NULLThe
przechodzenie zostanie zatrzymane. Pamiętaj, że używając TV_dfs i $tvroot, można tworzyć
nieskończona pętla.

Domyślnie przejście odbywa się w przedsprzedaży. Oznacza to, że węzeł był odwiedzany wcześniej
wszystkie jego nieodwiedzone krawędzie. Dla TV_postdfs, wszystkie nieodwiedzone krawędzie węzła są
odwiedzone przed węzłem. Dla TV_prepostdfs, węzeł jest odwiedzany dwukrotnie, przed i
po wszystkich jego nieodwiedzonych krawędziach.

TV_dalej : typ_tv
TV_postfwd : typ_tv
TV_prepostfwd : typ_tv
Przechodzenie przez wykres przy użyciu przeszukiwania w głąb tylko na wykresie następującym po nim
łuki do przodu. Wybór korzeni dla przejścia jest taki sam, jak opisano dla
TV_dfs powyżej. Inna kolejność wizytacji określona przez TV_dalej, TV_postfwd
i TV_prepostfwd są takie same, jak określone w analogicznych przejściach
TV_dfs, TV_postdfs i TV_prepostdfs.

TV_rew : typ_tv
TV_postrev : typ_tv
TV_prepostrev : typ_tv
Przechodzenie przez wykres przy użyciu przeszukiwania w głąb tylko na wykresie następującym po nim
odwrotne łuki. Wybór korzeni dla przejścia jest taki sam, jak opisano dla
TV_dfs powyżej. Inna kolejność wizytacji określona przez TV_rew, TV_postrev
i TV_prepostrev są takie same, jak określone w analogicznych przejściach
TV_dfs, TV_postdfs i TV_prepostdfs.

TV_bfs : typ_tv
Przechodzenie przez wykres przy użyciu przeszukiwania wszerz na wykresie ignorując krawędzie
wskazówki. Zobacz element na TV_dfs powyżej dla roli $tvroot.

PRZYKŁADY


gvpr -i 'N[kolor=="niebieski"]' plik.gv

Wygeneruj podgraf wywołany węzłem dla wszystkich węzłów w kolorze niebieskim.

gvpr -c 'N[kolor=="niebieski"]{kolor = "czerwony"}' plik.gv

Zmień wszystkie niebieskie węzły na czerwone.

ZACZYNAĆ { int n, e; int tot_n = 0; int dźwigać = 0; }
BEG_G {
n = nWęzły($G);
e = nKrawędzie($G);
printf ("%D węzły %d krawędzie %s\n", n, e, $G.nazwa);
tot_n += n;
dźwigać += e;
}
KONIEC { printf ("%D węzły %d krawędzie łącznie\n", tot_n, dźwigać) }

Wersja programu gc.

gvpr -c ""

Równoważny nie.

BEG_G { wykres_t g = wykres ("łączyć", "S"); }
E {
węzeł_t h = clone(g,$.head);
węzeł_t t = clone(g,$.tail);
krawędź_t e = krawędź(t,h,””);
e.waga = e.waga + 1;
}
END_G { $O = g; }

Tworzy ścisłą wersję wykresu wejściowego, w której znajduje się atrybut wagi krawędzi
wskazuje, ile krawędzi z grafu wejściowego reprezentuje ta krawędź.

ZACZYNAĆ {węzeł_t n; int stopień[]}
E{stopień[głowa]++; deg[ogon]++; }
END_G {
dla (stopnie[n]) {
printf („stopnie[%s] = %d\n", imie, stopień[n]);
}
}

Oblicza stopnie węzłów z krawędziami.

ZACZYNAĆ {
int i, akapit;
int widziałem[string];
unieważnić prInd (wł cnt) {
dla (i = 0; i < cnt; ja++) printf (" „);
}
}
BEG_G {

$typ telewizora = TV_prepostfwd;
$tvroot = węzeł($,ARGV[0]);
}
N {
if (widziano[$.imię]) akapit--;
więcej {
prInd(wcięcie);
($.nazwa);
widziałem[$.name] = 1;
wcięcie++;
}
}

Drukuje przejście wykresu w głąb, zaczynając od węzła, którego nazwa to
ARGV[0]jako lista z wcięciami.

ŚRODOWISKO


GVPRPATH
Rozdzielana dwukropkami lista katalogów, które mają zostać przeszukane w celu znalezienia określonego pliku
opcję -f. gvpr ma wbudowaną listę domyślną. If GVPRPATH nie jest zdefiniowany,
używana jest lista domyślna. Jeśli GVPRPATH zaczyna się od dwukropka, lista jest tworzona przez
dołączanie GVPRPATH do listy domyślnej. Jeśli GVPRPATH kończy się dwukropkiem, lista jest
utworzony przez dodanie domyślnej listy do GVPRPATH. W przeciwnym razie, GVPRPATH jest używany do
Lista.

W systemach Windows zamień „dwukropek” na „średnik” w poprzednim akapicie.

Korzystaj z gvpr online, korzystając z usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

Komendy systemu Linux

Ad