InglesPransesEspanyol

Ad


OnWorks favicon

gvpr - Online sa Cloud

Patakbuhin ang gvpr sa OnWorks na libreng hosting provider sa Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

Ito ang command na gvpr na maaaring patakbuhin sa OnWorks na libreng hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

PROGRAMA:

NAME


gvpr - graph pattern scanning at processing language

SINOPSIS


gvpr [-icnqV?] [ -o outfile ] [ -a mga pagtatalo ] [ 'prog' | -f progfile ] [ file ]

DESCRIPTION


gvpr (Dating kilala bilang gpr) ay isang graph stream editor na inspirasyon ni ang awkward. Kinokopya nito ang input
mga graph sa output nito, posibleng baguhin ang kanilang istraktura at mga katangian, na lumilikha ng bago
mga graph, o pag-print ng arbitrary na impormasyon. Ang modelo ng graph ay ang ibinigay ng
libcgraph(3). Sa partikular, gvpr nagbabasa at nagsusulat ng mga graph gamit ang tuldok na wika.

Talaga, gvpr binabagtas ang bawat input graph, na tinutukoy ng $G, pagbisita sa bawat node at gilid,
pagtutugma nito sa mga tuntunin ng predicate-action na ibinigay sa input program. Ang mga patakaran ay
sinusuri sa pagkakasunud-sunod. Para sa bawat panaguri na nagsusuri sa totoo, ang kaukulang aksyon ay
gumanap. Sa panahon ng traversal, ang kasalukuyang node o gilid na binibisita ay tinutukoy ng $.

Para sa bawat input graph, mayroong target na subgraph, na tinutukoy ng $T, sa una ay walang laman at ginamit
upang maipon ang mga napiling entity, at isang output graph, $O, ginagamit para sa panghuling pagproseso at pagkatapos
nakasulat sa output. Bilang default, ang output graph ay ang target na graph. Ang output graph
maaaring itakda sa programa o, sa isang limitadong kahulugan, sa command line.

Opsyon


Ang mga sumusunod na opsyon ay sinusuportahan:

-a mga pagtatalo
Ang tali mga pagtatalo ay nahahati sa mga token na pinaghihiwalay ng whitespace, kasama ang indibidwal
magagamit ang mga token bilang mga string sa gvpr programa bilang ARGV[0],...,ARGV[ARGC-1].
Mga whitespace na character sa loob ng single o double quoted substrings, o nangunguna sa a
backslash, ay hindi pinapansin bilang mga separator. Sa pangkalahatan, nag-o-off ang isang backslash na character
anumang espesyal na kahulugan ng sumusunod na karakter. Tandaan na ang mga token ay nagmula sa
maramihang -a ang mga watawat ay pinagsama-sama.

-c Gamitin ang source graph bilang output graph.

-i Kunin ang node-induced subgraph extension ng output graph sa konteksto ng
root graph nito.

-o outfile
Nagdudulot ng pagsusulat ng output stream sa tinukoy na file; bilang default, ang output ay
nakasulat sa stdout.

-f progfile
Gamitin ang mga nilalaman ng tinukoy na file bilang programa upang maisagawa sa input. Kung
progfile naglalaman ng isang slash na character, ang pangalan ay kinuha bilang pathname ng file.
Kung hindi, gvpr gagamit ng mga direktoryo na tinukoy sa variable ng kapaligiran
GVPRPATH para hanapin ang file. Kung -f ay hindi ibinigay, gvpr gagamit ng unang hindi
opsyon na argumento bilang programa.

-q Ino-off ang mga mensahe ng babala.

-n Ino-off ang graph read-ahead. Bilang default, ang variable $NG ay nakatakda sa susunod na graph
ipoproseso. Nangangailangan ito ng pagbabasa ng susunod na graph bago iproseso ang
kasalukuyang graph, na maaaring humarang kung ang susunod na graph ay nabuo lamang bilang tugon sa
ilang aksyon na nauukol sa pagproseso ng kasalukuyang graph.

-V Nagiging sanhi ng programa na mag-print ng impormasyon ng bersyon at lumabas.

-? Nagiging sanhi ng programa na mag-print ng impormasyon sa paggamit at lumabas.

MGA OPERAND


Ang sumusunod na operand ay suportado:

file Mga pangalan ng mga file na naglalaman ng 1 o higit pang mga graph sa tuldok na wika. Kung hindi -f opsyon
ay ibinigay, ang unang pangalan ay tinanggal mula sa listahan at ginamit bilang input program.
Kung walang laman ang listahan ng mga file, si stdin gagamitin.

MGA PROGRAMA


A gvpr Ang programa ay binubuo ng isang listahan ng mga sugnay ng predicate-action, na mayroong isa sa mga form:

BEGIN { aksyon }

BEG_G { aksyon }

N [ predicate ] { aksyon }

E [ predicate ] { aksyon }

END_G { aksyon }

END { aksyon }

Ang isang programa ay maaaring maglaman ng hindi hihigit sa isa sa bawat isa sa BEGIN, END_G at END mga sugnay. May pwede
maging anumang bilang ng BEG_G, N at E mga pahayag, ang una ay inilapat sa mga graph, ang pangalawa sa
node, ang pangatlo sa mga gilid. Ang mga ito ay pinaghihiwalay sa mga bloke, isang bloke na binubuo ng isang
opsyonal BEG_G pahayag at lahat N at E mga pahayag hanggang sa susunod BEG_G pahayag, kung
anuman. Ang pinakamataas na antas ng semantika ng a gvpr ang programa ay:

Suriin ang BEGIN sugnay, kung mayroon man.
Para sa bawat input graph G {
Para sa bawat bloke {
Itakda G bilang kasalukuyang graph at kasalukuyang bagay.
Suriin ang BEG_G sugnay, kung mayroon man.
Para sa bawat node at gilid sa loob G {
Itakda ang node o gilid bilang kasalukuyang bagay.
Suriin ang N or E mga sugnay, kung naaangkop.
}
}
Itakda G bilang kasalukuyang bagay.
Suriin ang END_G sugnay, kung mayroon man.
}
Suriin ang END sugnay, kung mayroon man.

Ang mga aksyon ng BEGIN, BEG_G, END_G at END Naisasagawa ang mga sugnay kapag ang mga sugnay ay
sinusuri. Para sa N or E mga sugnay, maaaring tanggalin ang panaguri o kilos. Kung meron
ay walang panaguri na may aksyon, ang aksyon ay ginagawa sa bawat node o gilid, bilang
nararapat. Kung walang aksyon at ang panaguri ay nagsusuri sa totoo, ang nauugnay
node o gilid ay idinagdag sa target na graph.

Ang mga bloke ay sinusuri sa pagkakasunud-sunod kung saan nangyari ang mga ito. Sa loob ng isang bloke, ang N clause
(E mga sugnay, ayon sa pagkakabanggit) ay sinusuri sa pagkakasunud-sunod kung saan ang nangyari. Tandaan, bagaman,
na sa loob ng isang bloke, N or E ang mga sugnay ay maaaring magkakaugnay, depende sa pagkakasunud-sunod ng traversal.

Ang mga panaguri at kilos ay mga pagkakasunod-sunod ng mga pahayag sa diyalektong C na sinusuportahan ng
ipahayag(3) aklatan. Ang pagkakaiba lamang sa pagitan ng panaguri at aksyon ay ang dating
dapat magkaroon ng isang uri na maaaring bigyang-kahulugan bilang tama o mali. Narito ang karaniwang C
sinusunod ang kumbensyon, kung saan ang isang hindi-zero na halaga ay itinuturing na totoo. Kabilang dito ang
non-empty string at non-empty reference sa mga node, edge, atbp. Gayunpaman, kung ang isang string ay maaaring
ma-convert sa isang integer, ginagamit ang halagang ito.

Bilang karagdagan sa karaniwang mga uri ng C base (walang bisa, int, tangke, lumutang, mahaba, hindi naka -ignign at double),
gvpr nagbibigay ng pisi bilang isang kasingkahulugan para sa char*, at ang mga uri na nakabatay sa graph node_t, gilid_t,
graph_t at obj_t. ang obj_t uri ay maaaring tingnan bilang isang supertype ng iba pang 3 kongkreto
mga uri; ang tamang uri ng base ay pinananatili nang pabago-bago. Bukod sa mga baseng uri na ito, ang
tanging ang iba pang sinusuportahang uri ng expression ay (nag-uugnay) na mga array.

Ang mga Constant ay sumusunod sa C syntax, ngunit ang mga string ay maaaring ma-quote sa alinman "..." or '...'. gvpr
tumatanggap ng mga komentong C++ gayundin ng mga komentong uri ng cpp. Para sa huli, kung ang isang linya ay nagsisimula sa
isang '#' na character, ang natitirang bahagi ng linya ay binabalewala.

Ang isang pahayag ay maaaring isang deklarasyon ng isang function, isang variable o isang array, o isang executable
pahayag. Para sa mga deklarasyon, mayroong isang saklaw. Ang mga deklarasyon ng array ay may anyo:

uri ayos [ type0 ]

saan type0 ay opsyonal. Kung ito ay ibinibigay, ipapatupad ng parser ang lahat ng array
ang mga subscript ay may tinukoy na uri. Kung hindi ito ibinibigay, ang mga bagay sa lahat ng uri ay maaaring
ginamit bilang mga subscript. Tulad ng sa C, dapat ideklara ang mga variable at array. Sa partikular, isang
Ang di-ipinahayag na variable ay bibigyang-kahulugan bilang pangalan ng isang katangian ng isang node, gilid o
graph, depende sa konteksto.

Ang mga executable na pahayag ay maaaring isa sa mga sumusunod:

{ [ pahayag ... ] }
pagpapahayag // karaniwan ay = pagpapahayag
kung( pagpapahayag ) pahayag [ iba pahayag ]
para sa( pagpapahayag ; pagpapahayag ; pagpapahayag ) pahayag
para sa( ayos [ ay ]) pahayag
forr( ayos [ ay ]) pahayag
habang ( pagpapahayag ) pahayag
lumipat ( pagpapahayag ) kaso pahayag
masira [ pagpapahayag ]
magpatuloy [ pagpapahayag ]
pagbabalik [ pagpapahayag ]
Ang mga item sa mga bracket ay opsyonal.

Sa pangalawang anyo ng para pahayag at ang forr pahayag, ang variable ay ay nakatakda sa
bawat value na ginamit bilang index sa tinukoy na array at pagkatapos ay ang nauugnay pahayag is
sinusuri. Para sa mga numeric at string na indeks, ang mga indeks ay ibinabalik sa pagtaas
(bumababa) numeric o lexicographic order para sa para (forr, ayon sa pagkakabanggit). Ito ay maaaring gamitin
para sa pag-uuri.

Ang mga kahulugan ng function ay maaari lamang lumitaw sa BEGIN sugnay.

Kasama sa mga expression ang karaniwang C expression. Mga paghahambing ng string gamit ang == at != gamutin ang
kanang kamay na operand bilang isang pattern para sa layunin ng regular na pagtutugma ng expression. Mga pattern
gamitin ksh(1) syntax ng pattern ng pagtutugma ng file. (Para sa simpleng pagkakapantay-pantay ng string, gamitin ang strcmp
function.

gvpr susubukang gumamit ng expression bilang string o numeric na halaga kung naaangkop. pareho
Ang mga tulad-C na cast at mga template ng function ay magdudulot ng mga conversion na maisagawa, kung maaari.

Mga ekspresyon ng uri ng grapiko (ibig sabihin, graph_t, node_t, gilid_t, obj_t) ay maaaring sundan ng a
sanggunian sa larangan sa anyo ng .pangalan. Ang resultang halaga ay ang halaga ng katangian
pinangalanan pangalan ng ibinigay na bagay. Bilang karagdagan, sa ilang mga konteksto ang isang hindi ipinahayag,
ang hindi binagong identifier ay itinuturing na isang pangalan ng katangian. Sa partikular, ang mga naturang identifier
tukuyin ang mga katangian ng kasalukuyang node o gilid, ayon sa pagkakabanggit, sa N at E mga sugnay, at ang
kasalukuyang graph sa BEG_G at END_G mga sugnay.

Gaya ng nakagawian sa libcgraph(3) modelo, ang mga katangian ay string-valued. At saka, gvpr
sumusuporta sa ilang pseudo-attribute ng mga graph object, hindi kinakailangang string-valued. Ang mga ito
sumasalamin sa mga intrinsic na katangian ng mga bagay sa graph at hindi maaaring itakda ng user.

ulo : node_t
ang ulo ng isang gilid.

buntot : node_t
ang buntot ng isang gilid.

pangalan : pisi
ang pangalan ng isang gilid, node o graph. Ang pangalan ng isang gilid ay may anyo na "<tail‐
pangalan>[]", saan ay "->"O"--" depende sa
kung ang graph ay nakadirekta o hindi. Ang bahagi ng bracket [] lilitaw lamang kung ang
may non-trivial key ang gilid.

indegree : int
ang indegree ng isang node.

outdegree : int
ang outdegree ng isang node.

degree : int
ang antas ng isang node.

ugat : graph_t
ang root graph ng isang bagay. Ang ugat ng isang root graph ay mismo.

magulang : graph_t
ang parent graph ng isang subgraph. Ang magulang ng isang root graph ay Walang halaga

n_edges : int
ang bilang ng mga gilid sa graph

n_nodes : int
ang bilang ng mga node sa graph

nakadirekta : int
true (non‐zero) kung ang graph ay nakadirekta

mahigpit : int
true (non‐zero) kung mahigpit ang graph

BUILT-IN Mga function


Ang mga sumusunod na function ay binuo sa gvpr. Ang mga function na iyon ay nagbabalik ng mga sanggunian sa graph
bumalik ang mga bagay Walang halaga sa kaso ng pagkabigo.

Mga graph at subgraph
talangguhit(s : pisi, t : pisi): graph_t
lumilikha ng isang graph na ang pangalan ay s at ang uri ay tinukoy ng string t.
Hindi pinapansin ang kaso, ang mga karakter U, D, S, N magkaroon ng interpretasyon na hindi nakadirekta,
nakadirekta, mahigpit, at hindi mahigpit, ayon sa pagkakabanggit. Kung t ay walang laman, nakadirekta, hindi
mahigpit na graph ang nabuo.

subg(g : graph_t, s : pisi): graph_t
lumilikha ng subgraph sa graph g may pangalan s. Kung ang subgraph ay mayroon na, ito ay
bumalik.

isSubg(g : graph_t, s : pisi): graph_t
ibinabalik ang subgraph sa graph g may pangalan s, kung mayroon, o Walang halaga kung hindi man.

fstsubg(g : graph_t): graph_t
ibinabalik ang unang subgraph sa graph g, O Walang halaga kung wala.

nxtsubg(sg : graph_t): graph_t
ibinabalik ang susunod na subgraph pagkatapos sg, O Walang halaga.

ay Direkta(g : graph_t): int
nagbabalik ng totoo kung at kung lamang g ay nakadirekta.

ay Mahigpit(g : graph_t): int
nagbabalik ng totoo kung at kung lamang g ay mahigpit.

nNode(g : graph_t): int
ibinabalik ang bilang ng mga node sa g.

nEdges(g : graph_t): int
ibinabalik ang bilang ng mga gilid sa g.

Node
buko(sg : graph_t, s : pisi): node_t
lumilikha ng node sa graph g ng pangalan s. Kung mayroon nang ganoong node, ibinabalik ito.

subnode(sg : graph_t, n : node_t): node_t
ipinapasok ang node n sa subgraph g. Ibinabalik ang node.

fstnode(g : graph_t): node_t
ibinabalik ang unang node sa graph g, O Walang halaga kung wala.

nxtnode(n : node_t): node_t
ibinabalik ang susunod na node pagkatapos n sa root graph, o Walang halaga.

nxtnode_sg(sg : graph_t, n : node_t): node_t
ibinabalik ang susunod na node pagkatapos n in sg, O Walang halaga.

isNode(sg : graph_t, s : pisi): node_t
naghahanap ng node sa (sub)graph sg ng pangalan s. Kung mayroong ganoong node, ibinabalik ito.
Kung hindi, Walang halaga ay ibinalik.

aySubnode(sg : graph_t, n : node_t): int
nagbabalik ng non-zero kung node n ay nasa (sub)graph sg, o zero kung hindi man.

indegreeOf(sg : graph_t, n : node_t): int
ibinabalik ang indegree ng node n sa (sub)graph sg.

outdegreeOf(sg : graph_t, n : node_t): int
ibinabalik ang outdegree ng node n sa (sub)graph sg.

degreeOf(sg : graph_t, n : node_t): int
ibinabalik ang antas ng node n sa (sub)graph sg.

Mga Edge
gilid(t : node_t, h : node_t, s : pisi): gilid_t
lumilikha ng isang gilid na may tail node t, node ng ulo h at pangalan s sa root graph. Kung ang
ang graph ay hindi nakadirekta, ang pagkakaiba sa pagitan ng mga node ng ulo at buntot ay hindi mahalaga.
Kung mayroon nang ganoong gilid, ibinabalik ito.

gilid_sg(sg : graph_t, t : node_t, h : node_t, s : pisi): gilid_t
lumilikha ng isang gilid na may tail node t, node ng ulo h at pangalan s sa (sub)graph sg (at lahat
mga graph ng magulang). Kung ang graph ay hindi nakadirekta, ang pagkakaiba sa pagitan ng ulo at buntot
hindi mahalaga ang mga node. Kung mayroon nang ganoong gilid, ibinabalik ito.

lumubog(g : graph_t, e : gilid_t): gilid_t
ipinapasok ang gilid e sa subgraph g. Ibinabalik ang gilid.

isEdge(t : node_t, h : node_t, s : pisi): gilid_t
naghahanap ng gilid na may tail node t, node ng ulo h at pangalan s. Kung ang graph ay
hindi nakadirekta, ang pagkakaiba sa pagitan ng mga node ng ulo at buntot ay hindi mahalaga. Kung ganoon ang isang
umiiral ang gilid, ibinalik ito. kung hindi, Walang halaga ay ibinalik.

isEdge_sg(sg : graph_t, t : node_t, h : node_t, s : pisi): gilid_t
naghahanap ng gilid na may tail node t, node ng ulo h at pangalan s sa (sub)graph sg. Kung ang
ang graph ay hindi nakadirekta, ang pagkakaiba sa pagitan ng mga node ng ulo at buntot ay hindi mahalaga.
Kung mayroong ganoong gilid, ibinabalik ito. kung hindi, Walang halaga ay ibinalik.

isSubedge(g : graph_t, e : gilid_t): int
nagbabalik ng non-zero kung gilid e ay nasa (sub)graph sg, o zero kung hindi man.

fstout(n : node_t): gilid_t
ibinabalik ang unang labasan ng node n sa root graph.

fstout_sg(sg : graph_t, n : node_t): gilid_t
ibinabalik ang unang labasan ng node n sa (sub)graph sg.

nxtout(e : gilid_t): gilid_t
ibinabalik ang susunod na outedge pagkatapos e sa root graph.

nxtout_sg(sg : graph_t, e : gilid_t): gilid_t
ibinabalik ang susunod na outedge pagkatapos e sa graph sg.

fstin(n : node_t): gilid_t
ibinabalik ang unang inedge ng node n sa root graph.

fstin_sg(sg : graph_t, n : node_t): gilid_t
ibinabalik ang unang inedge ng node n sa graph sg.

nxtin(e : gilid_t): gilid_t
ibinabalik ang susunod na inedge pagkatapos e sa root graph.

nxtin_sg(sg : graph_t, e : gilid_t): gilid_t
ibinabalik ang susunod na inedge pagkatapos e sa graph sg.

fstedge(n : node_t): gilid_t
ibinabalik ang unang gilid ng node n sa root graph.

fstedge_sg(sg : graph_t, n : node_t): gilid_t
ibinabalik ang unang gilid ng node n sa graph sg.

nxtedge(e : gilid_t, node_t): gilid_t
ibinabalik ang susunod na gilid pagkatapos e sa root graph.

nxtedge_sg(sg : graph_t, e : gilid_t, node_t): gilid_t
ibinabalik ang susunod na gilid pagkatapos e sa graph sg.

opp(e : gilid_t, node_t): node_t
ibinabalik ang node sa gilid e hindi kapareho ng n. Nagbabalik ng NULL kung n ay hindi isang node ng
e. Ito ay maaaring maging kapaki-pakinabang kapag ginagamit fstedge at nxtedge upang mabilang ang mga kapitbahay ng
n.

Talangguhit I / O
magsulat(g : graph_t): walang bisa
mga kopya g sa tuldok na format papunta sa output stream.

sumulatG(g : graph_t, fname : pisi): walang bisa
mga kopya g sa tuldok na format sa file fname.

fwriteG(g : graph_t, fd : int): walang bisa
mga kopya g sa tuldok na format papunta sa bukas na stream na tinutukoy ng integer fd.

basahinG(fname : pisi): graph_t
nagbabalik ng graph na binasa mula sa file fname. Ang graph ay dapat nasa tuldok na format. Kung hindi
mababasa ang graph, Walang halaga ay ibinalik.

freadG(fd : int): graph_t
ibinabalik ang susunod na graph na binasa mula sa bukas na stream fd. Nagbabalik Walang halaga sa dulo ng file.

Talangguhit sari-sari
alisin(g : graph_t, x : obj_t): walang bisa
nagtatanggal ng bagay x mula sa graph g. Kung g is Walang halaga, ang function ay gumagamit ng root graph ng
x. Kung x ay isang graph o subgraph, ito ay sarado maliban kung x ay nakasarado.

isIn(g : graph_t, x : obj_t): int
nagbabalik ng totoo kung x ay nasa subgraph g.

cloneG(g : graph_t, s : pisi): graph_t
lumilikha ng isang clone ng graph g na may pangalan ng s. Kung s ay "", ang ginawang graph ay mayroong
parehong pangalan bilang g.

clone(g : graph_t, x : obj_t): obj_t
lumilikha ng isang clone ng bagay x sa graph g. Sa partikular, ang bagong bagay ay may pareho
pangalan/halaga ng mga katangian at istraktura bilang orihinal na bagay. Kung ang isang bagay na may
parehong susi bilang x mayroon na, ang mga katangian nito ay nasasapawan ng mga ng x at ang
bagay ay ibinalik. Kung ang isang gilid ay na-clone, ang parehong mga endpoint ay tahasang na-clone.
Kung ang isang graph ay na-clone, ang lahat ng mga node, mga gilid at mga subgraph ay tahasang na-clone. Kung x
ay isang graph, g maaaring hindi Walang halaga, kung saan ang naka-clone na bagay ay magiging isang bagong ugat
graph. Sa kasong ito, ang tawag ay katumbas ng cloneG(x,"").

kopyahin(g : graph_t, x : obj_t): obj_t
lumilikha ng isang kopya ng bagay x sa graph g, kung saan ang bagong bagay ay may parehong pangalan/halaga
mga katangian bilang orihinal na bagay. Kung ang isang bagay na may parehong key bilang x na
umiiral, ang mga katangian nito ay na-overlay ng mga ng x at ibinalik ang bagay. Tandaan
na ito ay isang mababaw na kopya. Kung x ay isang graph, wala sa mga node, gilid o subgraph nito
ay kinopya sa bagong graph. Kung x ay isang gilid, ang mga endpoint ay nilikha kung
kinakailangan, ngunit hindi sila na-clone. Kung x ay isang graph, g maaaring hindi Walang halaga, kung saan
ang na-clone na bagay ay magiging isang bagong root graph.

kopyaA(SRC : obj_t, tgt : obj_t): int
kinokopya ang mga katangian ng bagay SRC tumutol tgt, pag-overwrite sa anumang mga value ng attribute
tgt maaaring sa una ay mayroon.

magbuod(g : graph_t): walang bisa
nagpapalawak g sa node-induced subgraph extension nito sa root graph nito.

hasAttr(SRC : obj_t, pangalan : pisi): int
nagbabalik ng non-zero kung object SRC may katangian na ang pangalan ay pangalan. Nagbabalik ito ng 0
kung hindi man.

isAttr(g : graph_t, uri : pisi, pangalan : pisi): int
nagbabalik ng non-zero kung isang attribute pangalan ay tinukoy sa g para sa mga bagay ng
naibigay na uri. Para sa mga node, gilid, at graph, uri dapat ay "N", "E", at "G",
ayon sa pagkakabanggit. Nagbabalik ito ng 0 kung hindi man.

aget(SRC : obj_t, pangalan : pisi): pisi
ibinabalik ang halaga ng katangian pangalan sa bagay SRC. Ito ay kapaki-pakinabang para sa mga kasong iyon
kailan pangalan sumasalungat sa isa sa mga keyword gaya ng "ulo" o "ugat". Kung ang
ang attribute ay hindi naideklara sa graph, ang function ay magsisimula nito sa
isang default na halaga ng "". Upang maiwasan ito, dapat gamitin ng isa ang hasAttr or isAttr tungkulin
upang suriin kung ang katangian ay umiiral.

pag-aari(SRC : obj_t, pangalan : pisi, halaga : pisi): int
nagtatakda ng halaga ng katangian pangalan sa bagay SRC sa halaga. Nagbabalik ng 0 sa tagumpay,
non-zero sa kabiguan. Tingnan mo aget sa itaas.

getDflt(g : graph_t, uri : pisi, pangalan : pisi): pisi
ibinabalik ang default na halaga ng katangian pangalan sa mga bagay sa g ng ibinigay uri. Para sa
mga node, mga gilid, at mga graph, uri dapat ay "N", "E", at "G", ayon sa pagkakabanggit. Kung ang
ang attribute ay hindi naideklara sa graph, ang function ay magsisimula nito sa
isang default na halaga ng "". Upang maiwasan ito, dapat gamitin ng isa ang isAttr function upang suriin
na ang katangian ay umiiral.

setDflt(g : graph_t, uri : pisi, pangalan : pisi, halaga : pisi): int
nagtatakda ng default na halaga ng katangian pangalan sa halaga sa mga bagay sa g ng ibinigay
uri. Para sa mga node, gilid, at graph, uri dapat ay "N", "E", at "G", ayon sa pagkakabanggit.
Nagbabalik ng 0 sa tagumpay, hindi zero sa kabiguan. Tingnan mo getDflt sa itaas.

fstAttr(g : graph_t, uri : pisi): pisi
ibinabalik ang pangalan ng unang katangian ng mga bagay sa g ng ibinigay uri. Para sa
mga node, mga gilid, at mga graph, uri dapat ay "N", "E", at "G", ayon sa pagkakabanggit. Kung meron
ay walang mga katangian, ang string na "" ay ibinalik.

nxtAttr(g : graph_t, uri : pisi, pangalan : pisi): pisi
ibinabalik ang pangalan ng susunod na katangian ng mga bagay sa g ng ibinigay uri pagkatapos ng
katangian pangalan. Ang argumento pangalan dapat ay ang pangalan ng isang umiiral na katangian; ito
ay karaniwang magiging halaga ng pagbabalik ng isang nakaraang tawag sa fstAttr or nxtAttr. Para sa
mga node, mga gilid, at mga graph, uri dapat ay "N", "E", at "G", ayon sa pagkakabanggit. Kung meron
ay walang natitirang mga katangian, ang string na "" ay ibinalik.

compOf(g : graph_t, n : node_t): graph_t
ibinabalik ang konektadong bahagi ng graph g naglalaman ng node n, bilang isang subgraph ng
g. Ang subgraph ay naglalaman lamang ng mga node. Maaaring gamitin ng isa magbuod upang idagdag ang mga gilid. Ang
nabigo ang function at bumabalik Walang halaga if n wala sa g. Ang pagkakakonekta ay batay sa
pinagbabatayan na hindi nakadirekta na graph ng g.

medyo(obj : obj_t): pisi
nagbabalik ng indikasyon ng uri ng obj. Para sa mga node, gilid, at mga graph, bumabalik ito
"N", "E", at "G", ayon sa pagkakabanggit.

ikulong(g : graph_t, v : int): int
nagpapatupad ng graph locking sa mga root graph. Kung ang integer v ay positibo, ang graph ay
itakda upang ang hinaharap ay tumawag sa alisin walang agarang epekto. Kung v ay zero, ang
naka-unlock ang graph. Kung nagkaroon ng isang tawag upang tanggalin ang graph habang ito ay
naka-lock, ang graph ay sarado. Kung v ay negatibo, walang ginagawa. Sa lahat ng kaso, ang
ibinalik ang dating halaga ng lock.

String
sprint(fmt : pisi, ...): pisi
ibinabalik ang string na nagreresulta mula sa pag-format ng mga halaga ng mga expression
nagaganap pagkatapos fmt ayon sa printf(3) pormat fmt

gsub(STR : pisi, tapik : pisi): pisi

gsub(STR : pisi, tapik : pisi, repl : pisi): pisi
Babalik STR sa lahat ng mga substring na tumutugma tapik tinanggal o pinalitan ng repl,
ayon sa pagkakabanggit.

sub(STR : pisi, tapik : pisi): pisi

sub(STR : pisi, tapik : pisi, repl : pisi): pisi
Babalik STR na may pinakakaliwang substring na tumutugma tapik tinanggal o pinalitan ng repl,
ayon sa pagkakabanggit. Ang mga character na '^' at '$' ay maaaring gamitin sa simula at wakas,
ayon sa pagkakabanggit, ng tapik upang iangkla ang pattern sa simula o dulo ng STR.

substr(STR : pisi, idx : int): pisi

substr(STR : pisi, idx : int, Len : int): pisi
ibinabalik ang substring ng STR simula sa posisyon idx hanggang sa dulo ng string o
ng haba Len, ayon sa pagkakabanggit. Ang pag-index ay nagsisimula sa 0. Kung idx ay negatibo o idx is
mas malaki kaysa sa haba ng STR, nangyayari ang isang nakamamatay na error. Katulad nito, sa pangalawa
kaso, kung Len ay negatibo o idx + Len ay mas malaki kaysa sa haba ng STR, isang nakamatay
nangyayari ang error.

strcmp(s1 : pisi, s2 : pisi): int
nagbibigay ng karaniwang C function strcmpNa (3).

haba(s : pisi): int
ibinabalik ang haba ng string s.

index(s : pisi, t : pisi): int

rindex(s : pisi, t : pisi): int
ibinabalik ang index ng character sa string s kung saan ang pinakakaliwa (pinakakanan) kopya
ng string t ay matatagpuan, o -1 kung t ay hindi isang substring ng s.

tumugma(s : pisi, p : pisi): int
ibinabalik ang index ng character sa string s kung saan ang pinakakaliwang tugma ng pattern
p ay matatagpuan, o -1 kung walang substring ng s posporo p.

topper(s : pisi): pisi
nagbabalik ng bersyon ng s na may mga alphabetic na character na na-convert sa upper-case.

babaan(s : pisi): pisi
nagbabalik ng bersyon ng s na may mga alphabetic na character na na-convert sa lower-case.

reglo(s : pisi): pisi
nagbabalik ng bersyon ng s naaangkop na gamitin bilang isang identifier sa isang tuldok na file.

html(g : graph_t, s : pisi): pisi
nagbabalik ng ``magic'' na bersyon ng s bilang isang HTML string. Ito ay karaniwang ginagamit upang
mag-attach ng HTML-like na label sa isang graph object. Tandaan na nakatira ang ibinalik na string
g. Sa partikular, ito ay mapapalaya kapag g ay sarado, at upang kumilos bilang isang HTML string,
ito ay dapat gamitin sa isang bagay ng g. Bilang karagdagan, tandaan na ang anggulo bracket
hindi dapat bahagi ng mga quotes s. Ang mga ito ay idadagdag kung g ay nakasulat sa konkretong DOT
format.

ishtml(s : pisi): int
nagbabalik ng hindi zero kung at kung lamang s ay isang HTML string.

xOf(s : pisi): pisi
ibinabalik ang string"x"kung s may porma"x,y", kung saan pareho x at y ay numeric.

yOf(s : pisi): pisi
ibinabalik ang string"y"kung s may porma"x,y", kung saan pareho x at y ay numeric.

llOf(s : pisi): pisi
ibinabalik ang string"llx,lly"kung s may porma"llx,lly,urx,ury", kung saan ang lahat ng llx,
lly, urx, at ury ay numeric.

urOf(s)
urOf(s : pisi): pisi ibinabalik ang string"urx,ury"kung s may porma
"llx,lly,urx,ury", kung saan ang lahat ng llx, lly, urx, at ury ay numeric.

sscanf(s : pisi, fmt : pisi, ...): int
sinusuri ang string s, pagkuha ng mga halaga ayon sa sscanf(3) pormat fmt. ang
ang mga halaga ay nakaimbak sa mga sumusunod na address fmt, mga address na may form &v,
saan v ay ilang ipinahayag na variable ng tamang uri. Ibinabalik ang bilang ng mga item
matagumpay na na-scan.

pagsibak(s : pisi, narating : ayos, seps : pisi): int

pagsibak(s : pisi, narating : ayos): int

token(s : pisi, narating : ayos, seps : pisi): int

token(s : pisi, narating : ayos): int
Ang pagsibak sinira ng function ang string s sa mga patlang, habang ang token tungkulin
pinuputol ang string sa mga token. Binubuo ang isang field ng lahat ng character na hindi naghihiwalay
sa pagitan ng dalawang separator character o sa simula o dulo ng string. Kaya, a
field ay maaaring ang walang laman na string. Ang isang token ay isang pinakamalaki, hindi walang laman na substring hindi
naglalaman ng karakter ng separator. Ang mga karakter ng separator ay ang mga ibinigay sa
seps argumento. Kung seps ay hindi ibinigay, ang default na halaga ay " \t\n". Ang
ibinabalik ng mga function ang bilang ng mga field o token.

Ang mga patlang at mga token ay naka-imbak sa array ng argumento. Ang array ay dapat na pisi-
pinahahalagahan at, kung ang isang uri ng index ay tinukoy, ito ay dapat int. Ang mga entry ay na-index
sa pamamagitan ng magkakasunod na integer, simula sa 0. Ang anumang mga value na nakaimbak na sa array ay gagawin
maaaring ma-overwrite, o naroroon pa rin pagkatapos bumalik ang function.

I / O
i-print(...): walang bisa
i-print ( ipahayag, ... ) nagpi-print ng isang string na representasyon ng bawat argument sa turn papunta
stdout, na sinusundan ng isang bagong linya.

printf(fmt : pisi, ...): int

printf(fd : int, fmt : pisi, ...): int
nagpi-print ng string na nagreresulta mula sa pag-format ng mga halaga ng mga sumusunod na expression
fmt ayon sa printf(3) pormat fmt. Nagbabalik ng 0 sa tagumpay. Bilang default, ito
naka-print sa stdout. Kung ang opsyonal na integer fd ay ibinigay, ang output ay nakasulat sa
bukas na stream na nauugnay sa fd.

scanf(fmt : pisi, ...): int

scanf(fd : int, fmt : pisi, ...): int
pag-scan sa mga halaga mula sa isang input stream ayon sa scanf(3) pormat fmt. ang
ang mga halaga ay nakaimbak sa mga sumusunod na address fmt, mga address na may form &v,
saan v ay ilang ipinahayag na variable ng tamang uri. Bilang default, nagbabasa ito mula sa
si stdin. Kung ang opsyonal na integer fd ay ibinigay, ang input ay binabasa mula sa bukas na stream
na nauugnay sa fd. Ibinabalik ang bilang ng mga item na matagumpay na na-scan.

bukasF(s : pisi, t : pisi): int
magbubukas ng file s bilang isang I/O stream. Ang string argument t tumutukoy kung paano ang file
binuksan. Ang mga argumento ay kapareho ng para sa C function fopen(3). Ibinabalik nito ang isang
integer na nagsasaad ng stream, o -1 sa error.

Gaya ng dati, ang mga stream 0, 1 at 2 ay bukas na bilang si stdin, stdout, at stderr,
ayon sa pagkakabanggit. Since gvpr maaaring gumamit si stdin para basahin ang mga input graph, dapat ang user
iwasang gamitin ang stream na ito.

malapitF(fd : int): int
isinasara ang bukas na stream na tinutukoy ng integer fd. Ang mga stream 0, 1 at 2 ay hindi maaaring
sarado. Nagbabalik ng 0 sa tagumpay.

basahinL(fd : int): pisi
ibinabalik ang susunod na linyang nabasa mula sa input stream fd. Ibinabalik nito ang walang laman na string na ""
sa dulo ng file. Tandaan na ang karakter ng bagong linya ay naiwan sa ibinalik na string.

Math
exp(d : double): double
nagbabalik e sa dika kapangyarihan.

mag-log(d : double): double
ibinabalik ang natural na log ng d.

sqrt(d : double): double
ibinabalik ang square root ng double d.

yukod(d : double, x : double): double
Babalik d itinaas sa xika kapangyarihan.

kos(d : double): double
nagbabalik ng cosine ng d.

kasalanan(d : double): double
nagbabalik ng sine ng d.

atan2(y : double, x : double): double
ibinabalik ang arctangent ng y / x sa hanay -pi hanggang pi.

MIN(y : double, x : double): double
ibinabalik ang pinakamababa ng y at x.

MAX(y : double, x : double): double
ibinabalik ang maximum ng y at x.

Nag-uugnay Mga Arrays
# narating : int
ibinabalik ang bilang ng mga elemento sa array narating.

idx in narating : int
nagbabalik ng 1 kung ang isang halaga ay naitakda para sa index idx sa hanay narating. Nagbabalik ito ng 0
kung hindi man.

i-unset(v : ayos, idx): int
inaalis ang item na na-index ni idx. Nagbabalik ito ng 1 kung umiral ang item, 0 kung hindi.

i-unset(v : ayos): walang bisa
muling ini-initialize ang array.

sari-sari
lumabas(v : int): walang bisa
sanhi gvpr upang lumabas gamit ang exit code v.

sistema(cmd : pisi): int
nagbibigay ng karaniwang C function sistema(3). Ito ay nagpapatupad cmd sa shell ng gumagamit
environment, at ibinabalik ang exit status ng shell.

Rand(): double
nagbabalik ng pseudo-random na doble sa pagitan ng 0 at 1.

srand(): int

srand(v : int): int
nagtatakda ng binhi para sa random number generator. Ang opsyonal na argumento ay nagbibigay ng binhi;
kung ito ay tinanggal, ang kasalukuyang oras ay ginagamit. Ibinalik ang dating halaga ng binhi.
srand dapat tawagan bago ang anumang tawag sa Rand.

colorx(kulay : pisi, fmt : pisi): pisi
nagsasalin ng isang kulay mula sa isang format patungo sa isa pa. Ang kulay argument ay dapat na isang kulay
sa isa sa mga kinikilalang representasyon ng string. Ang fmt ang halaga ay dapat isa sa
"RGB", "RGBA", "HSV", o "HSVA". Ang isang walang laman na string ay ibinalik sa error.

BUILT-IN MGA VARIABLE


gvpr nagbibigay ng ilang espesyal, built-in na variable, na ang mga halaga ay awtomatikong itinatakda ng
gvpr depende sa konteksto. Maliban sa nabanggit, hindi mababago ng user ang kanilang mga halaga.

$ : obj_t
tumutukoy sa kasalukuyang bagay (node, gilid, graph) depende sa konteksto. Hindi ito
magagamit sa BEGIN or END mga sugnay.

$F : pisi
ay ang pangalan ng kasalukuyang input file.

$G : graph_t
nagsasaad ng kasalukuyang graph na pinoproseso. Hindi ito magagamit sa BEGIN or END
mga sugnay.

$NG : graph_t
nagsasaad ng susunod na graph na ipoproseso. Kung $NG ay NULL, ang kasalukuyang graph $G ay ang
huling graph. Tandaan na kung ang input ay nagmula sa stdin, ang huling graph ay hindi maaaring
tinutukoy hanggang sa sarado ang input pipe. Hindi ito magagamit sa BEGIN or END
mga sugnay, o kung ang -n ginagamit ang bandila.

$O : graph_t
nagsasaad ng output graph. Bago ang graph traversal, ito ay sinisimulan sa target
graph. Pagkatapos ng paglalakbay at anuman END_G mga aksyon, kung ito ay tumutukoy sa isang walang laman na graph,
ang graph na iyon ay naka-print sa output stream. Ito ay may bisa lamang sa N, E at END_G
mga sugnay. Ang output graph ay maaaring itakda ng user.

$T : graph_t
nagsasaad ng kasalukuyang target na graph. Ito ay isang subgraph ng $G at magagamit lamang sa
N, E at END_G mga sugnay.

$tgtname : pisi
nagsasaad ng pangalan ng target na graph. Bilang default, ito ay nakatakda sa "gvpr_result". Kung
ginamit nang maraming beses sa panahon ng pagpapatupad ng gvpr, ang pangalan ay idaragdag ng isang
integer. Maaaring itakda ng user ang variable na ito.

$tvroot : node_t
ay nagpapahiwatig ng panimulang node para sa isang (nakadirekta o hindi nakadirekta) depth-una o lapad-
unang pagtawid ng graph (cf. $tvtype sa ibaba). Ang default na halaga ay Walang halaga para
bawat input graph. Pagkatapos ng traversal sa ibinigay na ugat, kung ang halaga ng $tvroot
ay nagbago, ang isang bagong traversal ay magsisimula sa bagong halaga ng $tvroot. Gayundin, itakda
$tvnext sa ibaba.

$tvnext : node_t
ay nagpapahiwatig ng susunod na panimulang node para sa isang (nakadirekta o hindi nakadirekta) depth-una o
lawak-unang pagtawid ng graph (cf. $tvtype sa ibaba). Kung matatapos ang isang paglalakbay
at ang $tvroot ay hindi na-reset ngunit ang $tvnext ay naitakda ngunit hindi nagamit, ito
node ang gagamitin bilang susunod na pagpipilian para sa $tvroot. Ang default na halaga ay Walang halaga para
bawat input graph.

$tvedge : gilid_t
Para sa BFS at DFS traversals, ito ay nakatakda sa gilid na ginamit upang makarating sa kasalukuyang
node o gilid. Sa simula ng isang traversal, o para sa iba pang mga uri ng traversal, ang
ang halaga ay Walang halaga.

$tvtype : tvtype_t
nagsasaad kung paano gvpr binabagtas ang isang graph. Maaari lamang itong tumagal ng isa sa mga pare-parehong halaga
na may previx na "TV_" na inilarawan sa ibaba. TV_flat ay ang default.

Sa pinagbabatayan ng library ng graph cgraph(3), ang mga gilid sa hindi nakadirekta na mga graph ay binibigyan ng isang
arbitraryong direksyon. Ito ay ginagamit para sa mga traversal, tulad ng TV_fwd, nangangailangan
nakadirekta sa mga gilid.

ARGC : int
nagsasaad ng bilang ng mga argumento na tinukoy ng -a mga pagtatalo argumento ng command-line.

ARGV : pisi ayos
nagsasaad ng hanay ng mga argumento na tinukoy ng -a mga pagtatalo argumento ng command-line. Ang
iang argumento ay ibinigay ng ARGV[i].

BUILT-IN CONSTANTS


Mayroong ilang mga symbolic constants na tinukoy ng gvpr.

Walang halaga : obj_t
isang null object reference, katumbas ng 0.

TV_flat : tvtype_t
isang simple, patag na traversal, na may mga bagay na graph na binisita sa tila arbitrary na pagkakasunud-sunod.

TV_ne : tvtype_t
isang traversal na unang bumisita sa lahat ng mga node, pagkatapos ay sa lahat ng mga gilid.

TV_en : tvtype_t
isang traversal na unang bumisita sa lahat ng mga gilid, pagkatapos ay sa lahat ng mga node.

TV_dfs : tvtype_t
TV_postdfs : tvtype_t
TV_prepostdfs : tvtype_t
isang traversal ng graph gamit ang isang depth-first na paghahanap sa pinagbabatayan na hindi nakadirekta
graph. Upang gawin ang paglalakbay, gvpr susuriin ang halaga ng $tvroot. Kung ito ay may
parehong halaga na mayroon ito dati (sa simula, ang dating halaga ay sinisimulan
sa Walang halaga.), gvpr hahanapin lamang ang ilang hindi nabisitang node at tatawid sa konektado nito
sangkap. Sa kabilang banda, kung $tvroot ay nagbago, ang konektadong bahagi nito ay
libutin, ipagpalagay na hindi pa ito nabisita o, kung $tvroot is Walang halaga, ang
titigil ang paglalakbay. Tandaan na ang paggamit TV_dfs at $tvroot, ito ay posible na lumikha
isang walang katapusang loop.

Bilang default, ang traversal ay ginagawa sa pre-order. Iyon ay, ang isang node ay binisita bago
lahat ng hindi nabisitang mga gilid nito. Para sa TV_postdfs, lahat ng hindi nabisitang mga gilid ng node ay
binisita bago ang node. Para sa TV_prepostdfs, dalawang beses binibisita ang isang node, bago at
pagkatapos ng lahat ng hindi nabisitang mga gilid nito.

TV_fwd : tvtype_t
TV_postfwd : tvtype_t
TV_prepostfwd : tvtype_t
Isang traversal ng graph gamit ang isang depth-first na paghahanap sa sumusunod na graph lamang
pasulong na mga arko. Ang pagpili ng mga ugat para sa traversal ay pareho sa inilarawan para sa
TV_dfs sa itaas. Ang iba't ibang pagkakasunud-sunod ng pagbisita na tinukoy ni TV_fwd, TV_postfwd
at TV_prepostfwd ay pareho sa mga tinukoy ng kahalintulad na mga traversal
TV_dfs, TV_postdfs at TV_prepostdfs.

TV_rev : tvtype_t
TV_postrev : tvtype_t
TV_prepostrev : tvtype_t
Isang traversal ng graph gamit ang isang depth-first na paghahanap sa sumusunod na graph lamang
baligtad na mga arko. Ang pagpili ng mga ugat para sa traversal ay pareho sa inilarawan para sa
TV_dfs sa itaas. Ang iba't ibang pagkakasunud-sunod ng pagbisita na tinukoy ni TV_rev, TV_postrev
at TV_prepostrev ay pareho sa mga tinukoy ng kahalintulad na mga traversal
TV_dfs, TV_postdfs at TV_prepostdfs.

TV_bfs : tvtype_t
Isang traversal ng graph gamit ang breadth-first na paghahanap sa graph na binabalewala ang gilid
mga direksyon. Tingnan ang item sa TV_dfs sa itaas para sa papel ng $tvroot.

HALIMBAWA


gvpr -i 'N[color="blue"]' file.gv

Bumuo ng node-induced subgraph ng lahat ng node na may kulay na asul.

gvpr -c 'N[color="blue"]{color = "pula"}' file.gv

Gawing pula ang lahat ng asul na node.

BEGIN { int n, e; int tot_n = 0; int tot_e = 0; }
BEG_G {
n = nNodes($G);
e = nEdges($G);
printf ("%d nodes %d gilid %s\n", n, e, $G.name);
tot_n += n;
tot_e += e;
}
END { printf ("%d nodes %d gilid kabuuan\n", tot_n, tot_e) }

Bersyon ng programa gc.

gvpr -c ""

Katumbas ng nop.

BEG_G { graph_t g = talangguhit ("pagsamahin", "S"); }
E {
node_t h = clone(g,$.head);
node_t t = clone(g,$.buntot);
gilid_t e = gilid(t,h,"");
e.timbang = e.timbang + 1;
}
END_G { $O = g; }

Gumagawa ng mahigpit na bersyon ng input graph, kung saan ang katangian ng bigat ng isang gilid
ay nagpapahiwatig kung gaano karaming mga gilid mula sa input graph ang kinakatawan ng gilid.

BEGIN {node_t n; int deg[]}
E{deg[ulo]++; deg[buntot]++; }
END_G {
para (deg[n]) {
printf ("deg[%s] = %d\n", n.pangalan, deg [n]);
}
}

Kinakalkula ang mga antas ng mga node na may mga gilid.

BEGIN {
int i, indent;
int nakita [string];
walang bisa prind (int.) cnt) {
para (i = 0; i < cnt; i++) printf (" ");
}
}
BEG_G {

$tvtype = TV_prepostfwd;
$tvroot = node($,ARGV[0]);
}
N {
if (nakita [$.name]) indent--;
iba {
prInd(indent);
i-print ($.pangalan);
nakita [$.name] = 1;
indent++;
}
}

Ini-print ang depth-first traversal ng graph, simula sa node na ang pangalan ay
ARGV[0], bilang isang naka-indent na listahan.

Kapaligiran


GVPRPATH
Colon-separated list ng mga direktoryo na hahanapin para mahanap ang file na tinukoy ni
ang -f na opsyon. gvpr ay may built in na default na listahan. Kung GVPRPATH ay hindi tinukoy, ang
ginagamit ang default na listahan. Kung GVPRPATH nagsisimula sa colon, ang listahan ay nabuo sa pamamagitan ng
nakakabit GVPRPATH sa default na listahan. Kung GVPRPATH nagtatapos sa tutuldok, ang listahan ay
nabuo sa pamamagitan ng pagdaragdag ng default na listahan sa GVPRPATH. Kung hindi man, GVPRPATH ay ginagamit para sa
ang listahan.

Sa mga Windows system, palitan ang ``colon'' ng ``semicolon'' sa nakaraang talata.

Gamitin ang gvpr online gamit ang mga serbisyo ng onworks.net


Mga Libreng Server at Workstation

Mag-download ng Windows at Linux apps

Linux command

Ad