Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Ad


Biểu tượng yêu thích OnWorks

gvpr - Trực tuyến trên đám mây

Chạy gvpr trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks qua Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh gvpr có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


gvpr - ngôn ngữ xử lý và quét mẫu đồ thị

SYNOPSIS


gvpr [-icnqV?] [ -o ô uế ] [ -a args. ] [ 'ăn xin' | -f tập tin chương trình ] [ các tập tin ]

MÔ TẢ


gvpr (Trước đây được gọi là gpr) là một trình chỉnh sửa luồng biểu đồ được lấy cảm hứng từ ôi. Nó sao chép đầu vào
đồ thị cho đầu ra của nó, có thể chuyển đổi cấu trúc và thuộc tính của chúng, tạo ra
đồ thị, hoặc in thông tin tùy ý. Mô hình biểu đồ được cung cấp bởi
đồ thị thư viện(3). Đặc biệt, gvpr đọc và viết biểu đồ bằng cách sử dụng ngôn ngữ dấu chấm.

Về cơ bản, gvpr đi qua từng đồ thị đầu vào, được biểu thị bằng $G, truy cập từng nút và cạnh,
khớp nó với các quy tắc hành động vị từ được cung cấp trong chương trình đầu vào. Các quy tắc là
được đánh giá theo thứ tự. Đối với mỗi vị từ đánh giá thành true, hành động tương ứng là
đã thực hiện. Trong quá trình truyền tải, nút hoặc cạnh hiện tại đang được truy cập được biểu thị bằng $.

Đối với mỗi đồ thị đầu vào, có một đồ thị con mục tiêu, được biểu thị bằng $T, ban đầu trống và được sử dụng
để tích lũy các thực thể đã chọn và biểu đồ đầu ra, $O, được sử dụng để xử lý cuối cùng và sau đó
được ghi vào đầu ra. Theo mặc định, đồ thị đầu ra là đồ thị mục tiêu. Đồ thị đầu ra
có thể được đặt trong chương trình hoặc, theo nghĩa hạn chế, trên dòng lệnh.

LỰA CHỌN


Các tùy chọn sau được hỗ trợ:

-a args.
Chuỗi args. được chia thành các mã thông báo được phân tách bằng khoảng trắng, với từng cá nhân
mã thông báo có sẵn dưới dạng chuỗi trong gvpr chương trình như ARGV [0], ..., ARGV [ARGC-1].
Các ký tự khoảng trắng trong các chuỗi con được trích dẫn đơn hoặc kép, hoặc trước dấu
dấu gạch chéo ngược, được bỏ qua dưới dạng dấu phân cách. Nói chung, một ký tự gạch chéo ngược sẽ tắt
bất kỳ ý nghĩa đặc biệt của ký tự sau đây. Lưu ý rằng các mã thông báo có nguồn gốc từ
nhiều -a cờ được nối với nhau.

-c Sử dụng đồ thị nguồn làm đồ thị đầu ra.

-i Tìm ra phần mở rộng đồ thị con do nút gây ra của đồ thị đầu ra trong ngữ cảnh
đồ thị gốc của nó.

-o ô uế
Làm cho luồng đầu ra được ghi vào tệp được chỉ định; theo mặc định, đầu ra là
bằng văn bản cho tiêu chuẩn.

-f tập tin chương trình
Sử dụng nội dung của tệp được chỉ định làm chương trình để thực thi trên đầu vào. Nếu như
tập tin chương trình chứa một ký tự gạch chéo, tên được lấy làm tên đường dẫn của tệp.
Nếu không thì, gvpr sẽ sử dụng các thư mục được chỉ định trong biến môi trường
GVPRPATH để tìm tệp. Nếu như -f không được đưa ra, gvpr sẽ sử dụng đầu tiên không
đối số tùy chọn như chương trình.

-q Tắt thông báo cảnh báo.

-n Tắt tính năng đọc trước biểu đồ. Theo mặc định, biến $ NG được đặt thành đồ thị tiếp theo
để được xử lý. Điều này yêu cầu đọc biểu đồ tiếp theo trước khi xử lý
biểu đồ hiện tại, có thể chặn nếu biểu đồ tiếp theo chỉ được tạo để đáp ứng với
một số hành động liên quan đến việc xử lý biểu đồ hiện tại.

-V Khiến chương trình in thông tin phiên bản và thoát.

-? Khiến chương trình in thông tin sử dụng và thoát.

TOÁN HẠNG


Toán hạng sau được hỗ trợ:

các tập tin Tên của các tệp chứa 1 hoặc nhiều biểu đồ bằng ngôn ngữ dấu chấm. Nếu không -f tùy chọn
được đưa ra, tên đầu tiên được xóa khỏi danh sách và được sử dụng làm chương trình đầu vào.
Nếu danh sách tệp trống, tiêu chuẩn sẽ được sử dụng.

CHƯƠNG TRÌNH


A gvpr chương trình bao gồm một danh sách các mệnh đề hành động vị ngữ, có một trong các dạng:

BEGIN { hoạt động }

BEG_G { hoạt động }

N [ Thuộc tính ] { hoạt động }

E [ Thuộc tính ] { hoạt động }

END_G { hoạt động }

END { hoạt động }

Một chương trình có thể chứa nhiều nhất một trong số các BEGIN, END_GEND điều khoản. Có thể
là bất kỳ số nào trong số BEG_G, NE câu lệnh đầu tiên được áp dụng cho đồ thị, câu lệnh thứ hai để
các nút, thứ ba đến các cạnh. Chúng được tách thành các khối, một khối bao gồm
không bắt buộc BEG_G tuyên bố và tất cả NE tuyên bố cho đến tiếp theo BEG_G tuyên bố, nếu
không tí nào. Ngữ nghĩa cấp cao nhất của một gvpr chương trình là:

Đánh giá BEGIN điều khoản, nếu có.
Đối với mỗi đồ thị đầu vào G {
Đối với mỗi khối {
Thiết lập G dưới dạng đồ thị hiện tại và đối tượng hiện tại.
Đánh giá BEG_G điều khoản, nếu có.
Đối với mỗi nút và cạnh trong G {
Đặt nút hoặc cạnh làm đối tượng hiện tại.
Đánh giá N or E mệnh đề, khi thích hợp.
}
}
Thiết lập G như đối tượng hiện tại.
Đánh giá END_G điều khoản, nếu có.
}
Đánh giá END điều khoản, nếu có.

Các hành động của BEGIN, BEG_G, END_GEND mệnh đề được thực hiện khi mệnh đề
đã đánh giá. Vì N or E mệnh đề, vị ngữ hoặc hành động có thể được bỏ qua. Nếu có
không phải là vị từ với một hành động, hành động được thực hiện trên mọi nút hoặc cạnh, như
phù hợp. Nếu không có hành động nào và vị từ đánh giá là true, thì
nút hoặc cạnh được thêm vào đồ thị mục tiêu.

Các khối được đánh giá theo thứ tự mà chúng xuất hiện. Trong một khối, N điều khoản
(E các mệnh đề tương ứng) được đánh giá theo thứ tự xảy ra. Tuy nhiên, lưu ý,
trong một khối, N or E các mệnh đề có thể được xen kẽ, tùy thuộc vào thứ tự duyệt.

Vị ngữ và hành động là chuỗi các câu lệnh trong phương ngữ C được hỗ trợ bởi
thể hiện(3) thư viện. Sự khác biệt duy nhất giữa vị ngữ và hành động là
phải có một kiểu có thể được hiểu là đúng hoặc sai. Đây là C thông thường
được tuân theo quy ước, trong đó giá trị khác XNUMX được coi là đúng. Điều này sẽ bao gồm
các chuỗi không rỗng và các tham chiếu không rỗng đến các nút, các cạnh, v.v. Tuy nhiên, nếu một chuỗi có thể
được chuyển đổi thành một số nguyên, giá trị này được sử dụng.

Ngoài các loại đế C thông thường (làm mất hiệu lực, int, xe tăng, phao, Dài, unsignedtăng gấp đôi),
gvpr cung cấp chuỗi như một từ đồng nghĩa với char *và các loại dựa trên biểu đồ nút_t, cạnh_t,
đồ thị_tđối tượng. Các đối tượng loại có thể được xem như là một loại siêu của 3 loại bê tông còn lại
các loại; loại cơ sở chính xác được duy trì động. Bên cạnh các loại cơ sở này,
chỉ các biểu thức kiểu được hỗ trợ khác là mảng (liên kết).

Các hằng theo cú pháp C, nhưng các chuỗi có thể được trích dẫn bằng một trong hai "..." or '...'. gvpr
chấp nhận các bình luận C ++ cũng như các bình luận kiểu cpp. Đối với phần sau, nếu một dòng bắt đầu bằng
một ký tự '#', phần còn lại của dòng bị bỏ qua.

Một câu lệnh có thể là một khai báo của một hàm, một biến hoặc một mảng hoặc một tệp thực thi
tuyên bố. Đối với các khai báo, có một phạm vi duy nhất. Khai báo mảng có dạng:

kiểu mảng [ type0 ]

Ở đâu type0 Là tùy chọn. Nếu nó được cung cấp, trình phân tích cú pháp sẽ thực thi tất cả mảng đó
subcripts có loại được chỉ định. Nếu nó không được cung cấp, các đối tượng thuộc mọi loại có thể
được sử dụng như các chỉ số dưới đây. Như trong C, các biến và mảng phải được khai báo. Đặc biệt, một
biến chưa được khai báo sẽ được hiểu là tên của thuộc tính của nút, cạnh hoặc
đồ thị, tùy thuộc vào ngữ cảnh.

Các câu lệnh thực thi có thể là một trong những câu sau:

{ [ tuyên bố hữu ích. Cảm ơn ! ] }
biểu hiện // thông thường = biểu hiện
nếu( biểu hiện ) tuyên bố [ khác tuyên bố ]
vì( biểu hiện ; biểu hiện ; biểu hiện ) tuyên bố
vì( mảng [ ]) tuyên bố
forr ( mảng [ ]) tuyên bố
trong khi( biểu hiện ) tuyên bố
chuyển đổi ( biểu hiện ) trường hợp báo cáo
phá vỡ [ biểu hiện ]
tiếp tục [ biểu hiện ]
trở lại [ biểu hiện ]
Các mục trong ngoặc là tùy chọn.

Trong hình thức thứ hai của cho tuyên bố và forr câu lệnh, biến được thiết lập để
mỗi giá trị được sử dụng làm chỉ mục trong mảng được chỉ định và sau đó là tuyên bố is
đã đánh giá. Đối với chỉ số số và chuỗi, các chỉ số được trả về tăng dần
(giảm dần) thứ tự số hoặc từ vựng cho cho (forr, tương ứng). Cái này có thể được sử dụng
để phân loại.

Định nghĩa hàm chỉ có thể xuất hiện trong BEGIN mệnh đề.

Biểu thức bao gồm các biểu thức C thông thường. So sánh chuỗi bằng cách sử dụng ==!= đối xử với
toán hạng bên phải làm mẫu cho mục đích đối sánh biểu thức chính quy. Hoa văn
sử dụng ksh(1) cú pháp mẫu đối sánh tệp. (Đối với bình đẳng chuỗi đơn giản, hãy sử dụng strcmp
chức năng.

gvpr sẽ cố gắng sử dụng một biểu thức dưới dạng chuỗi hoặc giá trị số nếu thích hợp. Cả hai
Các phôi giống C và các mẫu hàm sẽ thực hiện chuyển đổi, nếu có thể.

Biểu thức của kiểu đồ họa (tức là, đồ thị_t, nút_t, cạnh_t, đối tượng) có thể được theo sau bởi một
tham chiếu trường dưới dạng .tên. Giá trị kết quả là giá trị của thuộc tính
tên tên của đối tượng đã cho. Ngoài ra, trong một số ngữ cảnh nhất định,
định danh chưa sửa đổi được lấy làm tên thuộc tính. Cụ thể, các số nhận dạng như vậy
biểu thị các thuộc tính của nút hoặc cạnh hiện tại, tương ứng, trong NE mệnh đề và
đồ thị hiện tại trong BEG_GEND_G điều khoản.

Như thường lệ trong đồ thị thư viện(3) mô hình, các thuộc tính là chuỗi ‐ có giá trị. Ngoài ra, gvpr
hỗ trợ các thuộc tính giả nhất định của các đối tượng đồ thị, không nhất thiết phải có giá trị chuỗi. Này
phản ánh các thuộc tính nội tại của các đối tượng đồ thị và người dùng không thể thiết lập.

cái đầu : nút_t
đầu của một cạnh.

đuôi : nút_t
đuôi của một cạnh.

tên : chuỗi
tên của một cạnh, nút hoặc đồ thị. Tên của một cạnh có dạng "<tail‐
tên>[]", ở đâu Là "->"Hoặc"--" phụ thuộc vào
đồ thị có hướng hay không. Phần dấu ngoặc [] chỉ xuất hiện nếu
cạnh có một khóa không tầm thường.

không đồng ý : int
sự thiếu sót của một nút.

thái quá : int
sự vượt trội của một nút.

trình độ : int
mức độ của một nút.

nguồn gốc : đồ thị_t
đồ thị gốc của một đối tượng. Gốc của một đồ thị gốc là chính nó.

cha mẹ : đồ thị_t
biểu đồ mẹ của một đồ thị con. Cha của một biểu đồ gốc là NULL

n_edge : int
số lượng các cạnh trong biểu đồ

n_node : int
số lượng nút trong biểu đồ

đạo diễn : int
true (khác XNUMX) nếu đồ thị có hướng

khắt khe : int
true (khác XNUMX) nếu biểu đồ nghiêm ngặt

ĐƯỢC XÂY DỰNG TRONG CHỨC NĂNG


Các chức năng sau được tích hợp vào gvpr. Các hàm đó trả về các tham chiếu đến đồ thị
đối tượng trở lại NULL trong trường hợp thất bại.

Đồ thị bảng phụ
đồ thị(s : chuỗi, t : chuỗi): đồ thị_t
tạo một biểu đồ có tên là s và kiểu của ai được chỉ định bởi chuỗi t.
Bỏ qua chữ hoa, các ký tự U, D, S, N có sự giải thích vô hướng,
có chỉ đạo, nghiêm ngặt và không nghiêm ngặt, tương ứng. Nếu như t trống, một hướng dẫn, không phải
biểu đồ nghiêm ngặt được tạo ra.

phụ(g : đồ thị_t, s : chuỗi): đồ thị_t
tạo một đồ thị con trong biểu đồ g với tên s. Nếu mục con đã tồn tại, nó là
trả lại.

isSubg(g : đồ thị_t, s : chuỗi): đồ thị_t
trả về đồ thị con trong biểu đồ g với tên s, nếu nó tồn tại, hoặc NULL nếu không thì.

fstsubg(g : đồ thị_t): đồ thị_t
trả về đồ thị con đầu tiên trong biểu đồ g, hoặc là NULL nếu không tồn tại.

nxtsubg(sg : đồ thị_t): đồ thị_t
trả về trang con tiếp theo sau sg, hoặc là NULL.

là trực tiếp(g : đồ thị_t): int
trả về true nếu và chỉ khi g được chỉ đạo.

là nghiêm ngặt(g : đồ thị_t): int
trả về true nếu và chỉ khi g là nghiêm ngặt.

nNodes(g : đồ thị_t): int
trả về số lượng nút trong g.

nCạnh(g : đồ thị_t): int
trả về số cạnh trong g.

Nodes
nút(sg : đồ thị_t, s : chuỗi): nút_t
tạo một nút trong biểu đồ g của tên s. Nếu một nút như vậy đã tồn tại, nó sẽ được trả về.

nút con(sg : đồ thị_t, n : nút_t): nút_t
chèn nút n vào tiểu đoạn g. Trả về nút.

fstnode(g : đồ thị_t): nút_t
trả về nút đầu tiên trong biểu đồ g, hoặc là NULL nếu không tồn tại.

nxtnode(n : nút_t): nút_t
trả về nút tiếp theo sau n trong biểu đồ gốc, hoặc NULL.

nxtnode_sg(sg : đồ thị_t, n : nút_t): nút_t
trả về nút tiếp theo sau n in sg, hoặc là NULL.

làNode(sg : đồ thị_t, s : chuỗi): nút_t
tìm kiếm một nút trong biểu đồ (phụ) sg của tên s. Nếu một nút như vậy tồn tại, nó sẽ được trả về.
Nếu không thì, NULL Được trả lại.

là nút con(sg : đồ thị_t, n : nút_t): int
trả về khác XNUMX nếu nút n nằm trong biểu đồ (phụ) sg, hoặc bằng không nếu không.

vô ơn(sg : đồ thị_t, n : nút_t): int
trả về nút không xác định n trong (phụ) đồ thị sg.

vượt trội(sg : đồ thị_t, n : nút_t): int
trả về điểm vượt trội của nút n trong (phụ) đồ thị sg.

mức độ(sg : đồ thị_t, n : nút_t): int
trả về mức độ của nút n trong (phụ) đồ thị sg.

Cạnh
cạnh(t : nút_t, h : nút_t, s : chuỗi): cạnh_t
tạo một cạnh với nút đuôi t, nút đầu h và tên s trong đồ thị gốc. Nếu
đồ thị là vô hướng, sự phân biệt giữa nút đầu và nút đuôi là không quan trọng.
Nếu một cạnh như vậy đã tồn tại, nó sẽ được trả về.

cạnh_sg(sg : đồ thị_t, t : nút_t, h : nút_t, s : chuỗi): cạnh_t
tạo một cạnh với nút đuôi t, nút đầu h và tên s trong (phụ) đồ thị sg (và tất cả
đồ thị mẹ). Nếu biểu đồ vô hướng, sự khác biệt giữa phần đầu và phần đuôi
các nút không quan trọng. Nếu một cạnh như vậy đã tồn tại, nó sẽ được trả về.

dưới đất(g : đồ thị_t, e : cạnh_t): cạnh_t
chèn cạnh e vào tiểu đoạn g. Trả về cạnh.

isEdge(t : nút_t, h : nút_t, s : chuỗi): cạnh_t
tìm kiếm một cạnh với nút đuôi t, nút đầu h và tên s. Nếu đồ thị là
vô hướng, sự phân biệt giữa nút đầu và nút đuôi là không quan trọng. Nếu như một
cạnh tồn tại, nó được trả về. Nếu không thì, NULL Được trả lại.

isEdge_sg(sg : đồ thị_t, t : nút_t, h : nút_t, s : chuỗi): cạnh_t
tìm kiếm một cạnh với nút đuôi t, nút đầu h và tên s trong (phụ) đồ thị sg. Nếu
đồ thị là vô hướng, sự phân biệt giữa nút đầu và nút đuôi là không quan trọng.
Nếu một cạnh như vậy tồn tại, nó sẽ được trả về. Nếu không thì, NULL Được trả lại.

làSubedge(g : đồ thị_t, e : cạnh_t): int
trả về khác XNUMX nếu cạnh e nằm trong biểu đồ (phụ) sg, hoặc bằng không nếu không.

mập mạp(n : nút_t): cạnh_t
trả về điểm vượt trội đầu tiên của nút n trong đồ thị gốc.

fstout_sg(sg : đồ thị_t, n : nút_t): cạnh_t
trả về điểm vượt trội đầu tiên của nút n trong (phụ) đồ thị sg.

nxtout(e : cạnh_t): cạnh_t
trả lại đợt phát triển tiếp theo sau e trong đồ thị gốc.

nxtout_sg(sg : đồ thị_t, e : cạnh_t): cạnh_t
trả lại đợt phát triển tiếp theo sau e trong đồ thị sg.

fstin(n : nút_t): cạnh_t
trả về inedge đầu tiên của nút n trong đồ thị gốc.

fstin_sg(sg : đồ thị_t, n : nút_t): cạnh_t
trả về inedge đầu tiên của nút n trong đồ thị sg.

nxtin(e : cạnh_t): cạnh_t
trả lại inedge tiếp theo sau khi e trong đồ thị gốc.

nxtin_sg(sg : đồ thị_t, e : cạnh_t): cạnh_t
trả lại inedge tiếp theo sau khi e trong đồ thị sg.

bàn đạp(n : nút_t): cạnh_t
trả về cạnh đầu tiên của nút n trong đồ thị gốc.

fstedge_sg(sg : đồ thị_t, n : nút_t): cạnh_t
trả về cạnh đầu tiên của nút n trong đồ thị sg.

nxtedge(e : cạnh_t, nút_t): cạnh_t
trả về cạnh tiếp theo sau e trong đồ thị gốc.

nxtedge_sg(sg : đồ thị_t, e : cạnh_t, nút_t): cạnh_t
trả về cạnh tiếp theo sau e trong đồ thị sg.

opp(e : cạnh_t, nút_t): nút_t
trả về nút trên cạnh e không bằng n. Trả về NULL nếu n không phải là một nút của
e. Điều này có thể hữu ích khi sử dụng bàn đạpnxtedge liệt kê những người hàng xóm của
n.

Đồ thị I / O
viết(g : đồ thị_t): làm mất hiệu lực
in g ở định dạng dấu chấm trên luồng đầu ra.

ghiG(g : đồ thị_t, biệt danh : chuỗi): làm mất hiệu lực
in g ở định dạng dấu chấm vào tệp biệt danh.

fwriteG(g : đồ thị_t, fd : int): làm mất hiệu lực
in g ở định dạng dấu chấm trên luồng mở được biểu thị bằng số nguyên fd.

đọcG(biệt danh : chuỗi): đồ thị_t
trả về một đồ thị được đọc từ tệp biệt danh. Biểu đồ phải ở định dạng dấu chấm. Nếu không
đồ thị có thể được đọc, NULL Được trả lại.

freadG(fd : int): đồ thị_t
trả về biểu đồ tiếp theo được đọc từ luồng mở fd. Lợi nhuận NULL ở cuối tệp.

Đồ thị sai lầm
xóa(g : đồ thị_t, x : đối tượng): làm mất hiệu lực
xóa đối tượng x từ đồ thị g. Nếu g is NULL, hàm sử dụng đồ thị gốc của
x. Nếu x là một đồ thị hoặc đồ thị con, nó bị đóng trừ khi x bị khóa.

trong(g : đồ thị_t, x : đối tượng): int
trả về true nếu x nằm trong mục con g.

nhân bảnG(g : đồ thị_t, s : chuỗi): đồ thị_t
tạo một bản sao của đồ thị g với tên của s. Nếu s là "", biểu đồ đã tạo có
cùng tên với g.

nhân bản(g : đồ thị_t, x : đối tượng): đối tượng
tạo ra một bản sao của đối tượng x trong đồ thị g. Đặc biệt, đối tượng mới có cùng
thuộc tính tên / giá trị và cấu trúc như đối tượng ban đầu. Nếu một đối tượng với
cùng một chìa khóa như x đã tồn tại, các thuộc tính của nó được phủ lên bởi những thuộc tính của x
đối tượng được trả lại. Nếu một cạnh được sao chép, cả hai điểm cuối đều được sao chép hoàn toàn.
Nếu một đồ thị được sao chép, tất cả các nút, cạnh và đồ thị con sẽ được sao chép hoàn toàn. Nếu như x
là một đồ thị, g có lẽ NULL, trong trường hợp đó, đối tượng được nhân bản sẽ là một gốc mới
đồ thị. Trong trường hợp này, cuộc gọi tương đương với cloneG (x, "").

bản sao(g : đồ thị_t, x : đối tượng): đối tượng
tạo một bản sao của đối tượng x trong đồ thị g, trong đó đối tượng mới có cùng tên / giá trị
các thuộc tính như đối tượng ban đầu. Nếu một đối tượng có cùng khóa với x Đã
tồn tại, các thuộc tính của nó được phủ lên bởi những thuộc tính của x và đối tượng được trả lại. Ghi chú
rằng đây là một bản sao cạn. Nếu như x là một đồ thị, không có nút, cạnh hoặc đồ thị con nào của nó
được sao chép vào biểu đồ mới. Nếu như x là một cạnh, các điểm cuối được tạo nếu
cần thiết, nhưng chúng không được nhân bản. Nếu như x là một đồ thị, g có lẽ NULL, trong trường hợp
đối tượng được nhân bản sẽ là một biểu đồ gốc mới.

bản saoA(src : đối tượng, tgt : đối tượng): int
sao chép các thuộc tính của đối tượng src phản đối tgt, ghi đè bất kỳ giá trị thuộc tính nào
tgt ban đầu có thể có.

kích thích(g : đồ thị_t): làm mất hiệu lực
kéo dài g đến phần mở rộng đồ thị con do nút gây ra trong đồ thị gốc của nó.

hasAttr(src : đối tượng, tên : chuỗi): int
trả về khác XNUMX nếu đối tượng src có một thuộc tính có tên là tên. Nó trả về 0
nếu không thì.

isAttr(g : đồ thị_t, loại : chuỗi, tên : chuỗi): int
trả về khác XNUMX nếu một thuộc tính tên đã được xác định trong g cho các đối tượng của
được loại. Đối với các nút, cạnh và đồ thị, loại phải là "N", "E" và "G",
tương ứng. Ngược lại, nó trả về 0.

già(src : đối tượng, tên : chuỗi): chuỗi
trả về giá trị của thuộc tính tên trong vật thể src. Điều này rất hữu ích cho những trường hợp
khi nào tên xung đột với một trong các từ khóa như "head" hoặc "root". Nếu
thuộc tính chưa được khai báo trong biểu đồ, hàm sẽ khởi tạo nó bằng
giá trị mặc định của "". Để tránh điều này, người ta nên sử dụng hasAttr or isAttr chức năng
để kiểm tra xem thuộc tính có tồn tại hay không.

một bộ(src : đối tượng, tên : chuỗi, giá trị : chuỗi): int
đặt giá trị của thuộc tính tên trong vật thể src đến giá trị. Trả về 0 khi thành công,
khác XNUMX khi thất bại. Nhìn thấy già ở trên.

nhận được Dflt(g : đồ thị_t, loại : chuỗi, tên : chuỗi): chuỗi
trả về giá trị mặc định của thuộc tính tên trong các đối tượng trong g của cái đã cho loại. Đối với
nút, cạnh và đồ thị, loại phải là "N", "E" và "G", tương ứng. Nếu
thuộc tính chưa được khai báo trong biểu đồ, hàm sẽ khởi tạo nó bằng
giá trị mặc định của "". Để tránh điều này, người ta nên sử dụng isAttr chức năng kiểm tra
rằng thuộc tính tồn tại.

setDflt(g : đồ thị_t, loại : chuỗi, tên : chuỗi, giá trị : chuỗi): int
đặt giá trị mặc định của thuộc tính tên đến giá trị trong các đối tượng trong g của cái đã cho
loại. Đối với các nút, cạnh và đồ thị, loại phải là "N", "E" và "G", tương ứng.
Trả về 0 khi thành công, khác XNUMX khi thất bại. Nhìn thấy nhận được Dflt ở trên.

fstAttr(g : đồ thị_t, loại : chuỗi): chuỗi
trả về tên của thuộc tính đầu tiên của các đối tượng trong g của cái đã cho loại. Đối với
nút, cạnh và đồ thị, loại phải là "N", "E" và "G", tương ứng. Nếu có
là không có thuộc tính, chuỗi "" được trả về.

nxtAttr(g : đồ thị_t, loại : chuỗi, tên : chuỗi): chuỗi
trả về tên của thuộc tính tiếp theo của các đối tượng trong g của cái đã cho loại sau
thuộc tính tên. Lý lẽ tên phải là tên của một thuộc tính hiện có; nó
thường sẽ là giá trị trả về của cuộc gọi trước đó tới fstAttr or nxtAttr. Đối với
nút, cạnh và đồ thị, loại phải là "N", "E" và "G", tương ứng. Nếu có
không còn thuộc tính nào, chuỗi "" được trả về.

compOf(g : đồ thị_t, n : nút_t): đồ thị_t
trả về thành phần được kết nối của biểu đồ g chứa nút n, như một tiểu đoạn của
g. Đồ thị con chỉ chứa các nút. Người ta có thể sử dụng kích thích để thêm các cạnh. Các
chức năng không thành công và trả về NULL if n không có trong g. Kết nối dựa trên
đồ thị vô hướng bên dưới của g.

tốt bụng(obj : đối tượng): chuỗi
trả về một dấu hiệu về loại obj. Đối với các nút, cạnh và đồ thị, nó trả về
"N", "E" và "G", tương ứng.

khóa(g : đồ thị_t, v : int): int
thực hiện khóa đồ thị trên đồ thị gốc. Nếu số nguyên v là số dương, đồ thị là
đặt để các cuộc gọi trong tương lai tới xóa không có hiệu lực ngay lập tức. Nếu như v là XNUMX,
đồ thị được mở khóa. Nếu đã có lời kêu gọi xóa biểu đồ trong khi
bị khóa, đồ thị bị đóng. Nếu như v là tiêu cực, không có gì được thực hiện. Trong mọi trường hợp,
giá trị khóa trước đó được trả về.

Strings
chạy nước rút(fmt : chuỗi, hữu ích. Cảm ơn !): chuỗi
trả về chuỗi kết quả từ việc định dạng các giá trị của biểu thức
xảy ra sau fmt theo printf(3) định dạng fmt

gsub(str : chuỗi, pat : chuỗi): chuỗi

gsub(str : chuỗi, pat : chuỗi, thay thế : chuỗi): chuỗi
Trả về str với tất cả các chuỗi con phù hợp pat bị xóa hoặc thay thế bởi thay thế,
tương ứng.

phụ(str : chuỗi, pat : chuỗi): chuỗi

phụ(str : chuỗi, pat : chuỗi, thay thế : chuỗi): chuỗi
Trả về str với kết hợp chuỗi con ngoài cùng bên trái pat bị xóa hoặc thay thế bởi thay thế,
tương ứng. Các ký tự '^' và '$' có thể được sử dụng ở đầu và cuối,
tương ứng, trong số pat để neo mẫu vào đầu hoặc cuối của str.

chất nền(str : chuỗi, IDX : int): chuỗi

chất nền(str : chuỗi, IDX : int, len : int): chuỗi
trả về chuỗi con của str bắt đầu từ vị trí IDX đến cuối chuỗi hoặc
chiều dài len, tương ứng. Lập chỉ mục bắt đầu từ 0. Nếu IDX là tiêu cực hoặc IDX is
lớn hơn chiều dài của str, một lỗi nghiêm trọng xảy ra. Tương tự, trong lần thứ hai
trường hợp, nếu len là tiêu cực hoặc IDX + len lớn hơn chiều dài của str, một cái chết
lỗi xảy ra.

strcmp(s1 : chuỗi, s2 : chuỗi): int
cung cấp chức năng C tiêu chuẩn strcmp(3).

chiều dài(s : chuỗi): int
trả về độ dài của chuỗi s.

chỉ số(s : chuỗi, t : chuỗi): int

chỉ mục(s : chuỗi, t : chuỗi): int
trả về chỉ mục của ký tự trong chuỗi s nơi bản sao ngoài cùng bên trái (ngoài cùng bên phải)
của chuỗi t có thể được tìm thấy, hoặc -1 nếu t không phải là một chuỗi con của s.

phù hợp với(s : chuỗi, p : chuỗi): int
trả về chỉ mục của ký tự trong chuỗi s nơi khớp ngoài cùng bên trái của mẫu
p có thể được tìm thấy, hoặc -1 nếu không có chuỗi con của s diêm p.

người đi du lịch(s : chuỗi): chuỗi
trả về một phiên bản của s với các ký tự chữ cái được chuyển đổi thành chữ hoa.

hạ thấp(s : chuỗi): chuỗi
trả về một phiên bản của s với các ký tự chữ cái được chuyển đổi thành chữ thường.

canon(s : chuỗi): chuỗi
trả về một phiên bản của s thích hợp được sử dụng làm định danh trong tệp chấm.

html(g : đồ thị_t, s : chuỗi): chuỗi
trả về phiên bản `` ma thuật '' của s dưới dạng một chuỗi HTML. Điều này thường sẽ được sử dụng để
đính kèm một nhãn giống HTML vào một đối tượng đồ thị. Lưu ý rằng chuỗi được trả về nằm trong
g. Đặc biệt, nó sẽ được giải phóng khi g được đóng và hoạt động như một chuỗi HTML,
nó phải được sử dụng với một đối tượng của g. Ngoài ra, hãy lưu ý rằng dấu ngoặc nhọn
dấu ngoặc kép không nên là một phần của s. Chúng sẽ được thêm vào nếu g được viết bằng DOT cụ thể
định dạng.

ishtml(s : chuỗi): int
trả về khác XNUMX nếu và chỉ khi s là một chuỗi HTML.

xOf(s : chuỗi): chuỗi
trả về chuỗi "x" nếu như s có dạng "x,y", cả hai xy là số.

yof(s : chuỗi): chuỗi
trả về chuỗi "y" nếu như s có dạng "x,y", cả hai xy là số.

sẽ có(s : chuỗi): chuỗi
trả về chuỗi "sẽ,lly" nếu như s có dạng "sẽ,lly,ux,ury", nơi tất cả sẽ,
lly, uxury là số.

urOf (s)
bạn của(s : chuỗi): chuỗi trả về chuỗi "ux,ury" nếu như s có hình thức
"sẽ,lly,ux,ury", nơi tất cả sẽ, lly, uxury là số.

sscanf(s : chuỗi, fmt : chuỗi, hữu ích. Cảm ơn !): int
quét chuỗi s, trích xuất các giá trị theo sscanf(3) định dạng fmt. Các
các giá trị được lưu trữ trong các địa chỉ sau fmt, địa chỉ có dạng &v,
Ở đâu v là một số biến được khai báo thuộc kiểu chính xác. Trả về số lượng mặt hàng
đã quét thành công.

chia(s : chuỗi, mảng : mảng, vết nứt : chuỗi): int

chia(s : chuỗi, mảng : mảng): int

thẻ(s : chuỗi, mảng : mảng, vết nứt : chuỗi): int

thẻ(s : chuỗi, mảng : mảng): int
Sản phẩm chia hàm phá vỡ chuỗi s vào các lĩnh vực, trong khi thẻ chức năng
ngắt chuỗi thành các mã thông báo. Một trường bao gồm tất cả các ký tự không phân tách
giữa hai ký tự phân cách hoặc đầu hoặc cuối chuỗi. Như vậy, một
trường có thể là chuỗi trống. Mã thông báo là một chuỗi con tối đa, không rỗng, không
chứa một ký tự phân cách. Các ký tự phân tách là những ký tự được đưa ra trong
vết nứt tranh luận. Nếu như vết nứt không được cung cấp, giá trị mặc định là "\ t \ n". Các
các hàm trả về số lượng trường hoặc mã thông báo.

Các trường và mã thông báo được lưu trữ trong mảng đối số. Mảng phải là chuỗi-
có giá trị và, nếu một loại chỉ mục được chỉ định, nó phải được int. Các mục nhập được lập chỉ mục
bởi các số nguyên liên tiếp, bắt đầu bằng 0. Mọi giá trị đã được lưu trữ trong mảng sẽ
được ghi đè hoặc vẫn hiện diện sau khi hàm trả về.

I / O
in(hữu ích. Cảm ơn !): làm mất hiệu lực
in( thể hiện, hữu ích. Cảm ơn ! ) lần lượt in biểu diễn chuỗi của từng đối số lên
tiêu chuẩn, theo sau là một dòng mới.

printf(fmt : chuỗi, hữu ích. Cảm ơn !): int

printf(fd : int, fmt : chuỗi, hữu ích. Cảm ơn !): int
in chuỗi kết quả từ việc định dạng các giá trị của các biểu thức sau
fmt theo printf(3) định dạng fmt. Trả về 0 khi thành công. Theo mặc định, nó
in trên tiêu chuẩn. Nếu số nguyên tùy chọn fd được đưa ra, đầu ra được viết trên
luồng mở liên kết với fd.

quét(fmt : chuỗi, hữu ích. Cảm ơn !): int

quét(fd : int, fmt : chuỗi, hữu ích. Cảm ơn !): int
quét các giá trị từ một luồng đầu vào theo quét(3) định dạng fmt. Các
các giá trị được lưu trữ trong các địa chỉ sau fmt, địa chỉ có dạng &v,
Ở đâu v là một số biến được khai báo thuộc kiểu chính xác. Theo mặc định, nó đọc từ
tiêu chuẩn. Nếu số nguyên tùy chọn fd được đưa ra, đầu vào được đọc từ luồng mở
liên quan fd. Trả về số lượng mục đã quét thành công.

mởF(s : chuỗi, t : chuỗi): int
mở tập tin s dưới dạng luồng I / O. Đối số chuỗi t chỉ định cách tệp
đã mở. Các đối số giống như đối với hàm C mở(3). Nó trả về một
số nguyên biểu thị luồng hoặc -1 khi bị lỗi.

Như thường lệ, các luồng 0, 1 và 2 đã mở như tiêu chuẩn, tiêu chuẩntiêu chuẩn,
tương ứng. Từ gvpr có thể sử dụng tiêu chuẩn để đọc các biểu đồ đầu vào, người dùng phải
tránh sử dụng luồng này.

đóngF(fd : int): int
đóng luồng mở được biểu thị bằng số nguyên fd. Luồng 0, 1 và 2 không được
đã đóng cửa. Trả về 0 khi thành công.

đọcL(fd : int): chuỗi
trả về dòng tiếp theo được đọc từ luồng đầu vào fd. Nó trả về chuỗi trống ""
ở cuối tệp. Lưu ý rằng ký tự dòng mới được để lại trong chuỗi trả về.

Toán học
exp(d : tăng gấp đôi): tăng gấp đôi
trả lại e cho dquyền lực thứ.

đăng nhập(d : tăng gấp đôi): tăng gấp đôi
trả về nhật ký tự nhiên của d.

câu hỏi(d : tăng gấp đôi): tăng gấp đôi
trả về căn bậc hai của kép d.

pow(d : tăng gấp đôi, x : tăng gấp đôi): tăng gấp đôi
Trả về d nâng lên xquyền lực thứ.

xe đẩy(d : tăng gấp đôi): tăng gấp đôi
trả về cosine của d.

tội(d : tăng gấp đôi): tăng gấp đôi
trả về sin của d.

atan2(y : tăng gấp đôi, x : tăng gấp đôi): tăng gấp đôi
trả về arctangent của y / x trong phạm vi -pi đến pi.

MIN(y : tăng gấp đôi, x : tăng gấp đôi): tăng gấp đôi
trả về mức tối thiểu là yx.

MAX(y : tăng gấp đôi, x : tăng gấp đôi): tăng gấp đôi
trả về tối đa yx.

Liên kết Mảng
# mảng : int
trả về số phần tử trong mảng mảng.

IDX in mảng : int
trả về 1 nếu một giá trị đã được đặt cho chỉ mục IDX trong mảng mảng. Nó trả về 0
nếu không thì.

không đặt(v : mảng, IDX): int
loại bỏ mục được lập chỉ mục bởi IDX. Nó trả về 1 nếu mục tồn tại, 0 nếu không.

không đặt(v : mảng): làm mất hiệu lực
khởi tạo lại mảng.

hỗn hợp
ra(v : int): làm mất hiệu lực
nguyên nhân gvpr thoát với mã thoát v.

hệ thống(cmd : chuỗi): int
cung cấp chức năng C tiêu chuẩn hệ thống(3). Nó thực thi cmd trong vỏ của người dùng
môi trường và trả về trạng thái thoát của trình bao.

rand(): tăng gấp đôi
trả về một đôi ngẫu nhiên giả từ 0 đến 1.

mảnh vụn(): int

mảnh vụn(v : int): int
đặt một hạt giống cho trình tạo số ngẫu nhiên. Đối số tùy chọn cung cấp cho hạt giống;
nếu nó được bỏ qua, thời gian hiện tại được sử dụng. Giá trị hạt giống trước đó được trả lại.
mảnh vụn nên được gọi trước khi có bất kỳ cuộc gọi nào tới rand.

màux(màu sắc : chuỗi, fmt : chuỗi): chuỗi
dịch một màu từ định dạng này sang định dạng khác. Các màu sắc đối số phải là một màu
trong một trong các biểu diễn chuỗi được công nhận. Các fmt giá trị phải là một trong số
"RGB", "RGBA", "HSV" hoặc "HSVA". Một chuỗi trống được trả về do lỗi.

ĐƯỢC XÂY DỰNG TRONG BIẾN


gvpr cung cấp một số biến đặc biệt, được tích hợp sẵn, có giá trị được đặt tự động bởi
gvpr tùy theo ngữ cảnh. Ngoại trừ như đã lưu ý, người dùng không thể sửa đổi các giá trị của họ.

$ : đối tượng
biểu thị đối tượng hiện tại (nút, cạnh, đồ thị) tùy thuộc vào ngữ cảnh. Không phải vậy
có sẵn trong BEGIN or END điều khoản.

$F : chuỗi
là tên của tệp đầu vào hiện tại.

$G : đồ thị_t
biểu thị đồ thị hiện tại đang được xử lý. Nó không có sẵn trong BEGIN or END
điều khoản.

$ NG : đồ thị_t
biểu thị đồ thị tiếp theo sẽ được xử lý. Nếu như $ NG là NULL, biểu đồ hiện tại $G
đồ thị cuối cùng. Lưu ý rằng nếu đầu vào đến từ stdin, thì biểu đồ cuối cùng không thể là
xác định cho đến khi đóng đường ống đầu vào. Nó không có sẵn trong BEGIN or END
mệnh đề, hoặc nếu -n cờ được sử dụng.

$O : đồ thị_t
biểu thị đồ thị đầu ra. Trước khi truyền biểu đồ, nó được khởi tạo tới mục tiêu
đồ thị. Sau khi duyệt và bất kỳ END_G các hành động, nếu nó đề cập đến một biểu đồ không rỗng,
đồ thị đó được in vào luồng đầu ra. Nó chỉ có giá trị trong N, EEND_G
điều khoản. Đồ thị đầu ra có thể do người dùng thiết lập.

$T : đồ thị_t
biểu thị đồ thị mục tiêu hiện tại. Nó là một tiểu đoạn của $G và chỉ có ở
N, EEND_G điều khoản.

$ tgtname : chuỗi
biểu thị tên của đồ thị mục tiêu. Theo mặc định, nó được đặt thành "gvpr_result". Nếu
được sử dụng nhiều lần trong quá trình thực hiện gvpr, tên sẽ được thêm vào
số nguyên. Biến này có thể do người dùng đặt.

$ tvroot : nút_t
cho biết nút bắt đầu cho độ sâu (được định hướng hoặc không được định hướng) ‐ đầu tiên hoặc bề rộng‐
đường đi ngang đầu tiên của biểu đồ (xem $ tvtype phía dưới). Giá trị mặc định là NULL cho
mỗi đồ thị đầu vào. Sau khi duyệt ở gốc đã cho, nếu giá trị của $ tvroot
đã thay đổi, một chuyển tải mới sẽ bắt đầu với giá trị mới là $ tvroot. Ngoài ra, thiết lập
$ tvnext phía dưới.

$ tvnext : nút_t
cho biết nút bắt đầu tiếp theo cho độ sâu (được định hướng hoặc vô hướng) ‐ đầu tiên hoặc
chiều rộng ‐ đường đi ngang đầu tiên của biểu đồ (x. $ tvtype phía dưới). Nếu một đường ngang kết thúc
$ tvroot chưa được đặt lại nhưng $ tvnext đã được thiết lập nhưng không được sử dụng, điều này
nút sẽ được sử dụng làm lựa chọn tiếp theo cho $ tvroot. Giá trị mặc định là NULL cho
mỗi đồ thị đầu vào.

$ tvedge : cạnh_t
Đối với truyền qua BFS và DFS, điều này được đặt thành cạnh được sử dụng để đến hiện tại
nút hoặc cạnh. Khi bắt đầu chuyển tải hoặc đối với các loại truyền tải khác,
giá trị là NULL.

$ tvtype : tvtype_t
chỉ ra làm thế nào gvpr đi qua một đồ thị. Nó chỉ có thể nhận một trong các giá trị không đổi
với previx "TV_" được mô tả bên dưới. TV_phẳng là mặc định.

Trong thư viện đồ thị bên dưới sơ đồ(3), các cạnh trong đồ thị vô hướng được đưa ra
hướng tùy ý. Điều này được sử dụng cho các đường đi ngang, chẳng hạn như TV_fwd, yêu cầu
các cạnh có hướng.

ARGC : int
biểu thị số lượng đối số được chỉ định bởi -a args. đối số dòng lệnh.

ARGV : chuỗi mảng
biểu thị mảng đối số được chỉ định bởi -a args. đối số dòng lệnh. Các
iđối số thứ được đưa ra bởi ARGV [i].

ĐƯỢC XÂY DỰNG TRONG HẰNG SỐ


Có một số hằng số tượng trưng được xác định bởi gvpr.

NULL : đối tượng
một tham chiếu đối tượng null, tương đương với 0.

TV_phẳng : tvtype_t
một đường ngang đơn giản, phẳng, với các đối tượng đồ thị được truy cập theo thứ tự dường như tùy ý.

TV_ne : tvtype_t
một đường ngang mà đầu tiên truy cập tất cả các nút, sau đó đến tất cả các cạnh.

TV_vi : tvtype_t
một đường ngang mà đầu tiên truy cập tất cả các cạnh, sau đó đến tất cả các nút.

TV_dfs : tvtype_t
TV_postdfs : tvtype_t
TV_prepostdfs : tvtype_t
duyệt qua biểu đồ bằng cách sử dụng tìm kiếm độ sâu ‐ đầu tiên trên
đồ thị. Để thực hiện việc chuyển tải, gvpr sẽ kiểm tra giá trị của $ tvroot. Nếu điều này có
cùng giá trị mà nó đã có trước đó (lúc bắt đầu, giá trị trước đó được khởi tạo
đến NULL.), gvpr sẽ chỉ đơn giản là tìm kiếm một số nút không được sử dụng và duyệt qua nó được kết nối
thành phần. Mặt khác, nếu $ tvroot đã thay đổi, thành phần được kết nối của nó sẽ
được tham quan, giả sử rằng nó chưa được ghé thăm trước đó hoặc, nếu $ tvroot is NULL, Các
đi ngang sẽ dừng lại. Lưu ý rằng sử dụng TV_dfs$ tvroot, nó có thể tạo ra
một vòng lặp vô hạn.

Theo mặc định, việc truyền tải được thực hiện theo thứ tự trước. Đó là, một nút được truy cập trước
tất cả các cạnh không được kiểm tra của nó. Vì TV_postdfs, tất cả các cạnh không được duyệt của nút là
đã truy cập trước nút. Vì TV_prepostdfs, một nút được truy cập hai lần, trước và
sau tất cả các cạnh không được mong đợi của nó.

TV_fwd : tvtype_t
TV_postfwd : tvtype_t
TV_prepostfwd : tvtype_t
Việc duyệt qua biểu đồ bằng cách sử dụng tìm kiếm theo độ sâu ‐ đầu tiên trên biểu đồ chỉ sau
các cung tròn về phía trước. Việc lựa chọn rễ cho quá trình truyền tải giống như được mô tả cho
TV_dfs bên trên. Thứ tự thăm viếng khác nhau được chỉ định bởi TV_fwd, TV_postfwd
TV_prepostfwd giống với những thứ được chỉ định bởi các đường truyền tương tự
TV_dfs, TV_postdfsTV_prepostdfs.

TV_rev : tvtype_t
TV_postrev : tvtype_t
TV_prepostrev : tvtype_t
Việc duyệt qua biểu đồ bằng cách sử dụng tìm kiếm theo độ sâu ‐ đầu tiên trên biểu đồ chỉ sau
vòng cung ngược. Việc lựa chọn rễ cho quá trình truyền tải giống như được mô tả cho
TV_dfs bên trên. Thứ tự thăm viếng khác nhau được chỉ định bởi TV_rev, TV_postrev
TV_prepostrev giống với những thứ được chỉ định bởi các đường truyền tương tự
TV_dfs, TV_postdfsTV_prepostdfs.

TV_bfs : tvtype_t
Đường ngang của biểu đồ bằng cách sử dụng tìm kiếm theo chiều rộng ‐ đầu tiên trên biểu đồ bỏ qua cạnh
hướng. Xem mặt hàng trên TV_dfs ở trên cho vai trò của $ tvroot.

VÍ DỤ


gvpr -i 'N [color == "blue"]' tập tin.gv

Tạo đồ thị con tạo ra nút của tất cả các nút với màu xanh lam.

gvpr -c 'N [color == "blue"] {màu = "màu đỏ"}' tập tin.gv

Làm cho tất cả các nút màu xanh lam có màu đỏ.

BEGIN { int n, e; int tot_n = 0; int tot_e = 0; }
BEG_G {
n = nNodes ($ G);
e = nEdges ($ G);
printf ("%NS các nút %d cạnh % s \ n ", n, e, $ G.name);
tot_n += n;
tot_e += e;
}
END { printf ("%NS các nút %d cạnh tổng \ n ", tot_n, tot_e) }

Phiên bản của chương trình gc.

gvpr -c ""

Tương đương với nope.

BEG_G { đồ thị_t g = đồ thị ("hợp nhất", "NS"); }
E {
nút_t h = clone (g, $. head);
nút_t t = clone (g, $. tail);
cạnh_t e = cạnh (t, h, "");
e. trọng lượng = e. trọng lượng + 1;
}
END_G { $O = g; }

Tạo một phiên bản nghiêm ngặt của đồ thị đầu vào, trong đó thuộc tính trọng số của một cạnh
cho biết có bao nhiêu cạnh từ biểu đồ đầu vào mà cạnh đó đại diện.

BEGIN {nút_t n; int độ []}
E {deg [đầu] ++; deg [đuôi] ++; }
END_G {
cho (deg [n]) {
printf ("độ [% s] = % d \ n ", n.tên, deg [n]);
}
}

Tính toán độ của các nút với các cạnh.

BEGIN {
int i, thụt vào trong;
int đã thấy [chuỗi];
làm mất hiệu lực in (NS cnt) {
cho (i = 0; i < cntt; i ++) printf (" ");
}
}
BEG_G {

$ tvtype = TV_prepostfwd;
$ tvroot = nút ($, ARGV [0]);
}
N {
if (đã xem [$. name]) thụt lề--;
khác {
prInd (thụt lề);
in ($ .name);
đã thấy [$. name] = 1;
thụt lề ++;
}
}

In đường truyền theo độ sâu đầu tiên của biểu đồ, bắt đầu bằng nút có tên là
ARGV [0], dưới dạng danh sách thụt lề.

MÔI TRƯỜNG


GVPRPATH
Danh sách thư mục được phân tách bằng dấu hai chấm để tìm kiếm tệp được chỉ định bởi
tùy chọn -f. gvpr có một danh sách mặc định được tích hợp sẵn. Nếu GVPRPATH không được xác định,
danh sách mặc định được sử dụng. Nếu như GVPRPATH bắt đầu bằng dấu hai chấm, danh sách được hình thành bởi
nối thêm GVPRPATH vào danh sách mặc định. Nếu như GVPRPATH kết thúc bằng dấu hai chấm, danh sách là
được hình thành bằng cách thêm danh sách mặc định vào GVPRPATH. Nếu không thì, GVPRPATH được sử dụng để
danh sách.

Trên hệ thống Windows, hãy thay thế `` dấu hai chấm '' bằng `` dấu chấm phẩy '' trong đoạn trước.

Sử dụng gvpr trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

Lệnh Linux

Ad