англійськафранцузькаіспанська

Ad


Значок OnWorks

gvpr - Інтернет у хмарі

Запустіть gvpr у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда gvpr, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


gvpr - мова сканування та обробки шаблонів графів

СИНТАКСИС


гвпр [-icnqV?] [ -o вихідний файл ] [ -a аргументи ] [ 'prog' | -f профіль ] [ файли ]

ОПИС


гвпр (Раніше відомий як гпр) – це редактор потоків графіків, натхненний awk. Він копіює введені дані
графіки до його виведення, можливо, трансформуючи їх структуру та атрибути, створюючи нові
графіки або друк довільної інформації. Графова модель - це та, що надається
libcgraph(3). Зокрема, гвпр читає та записує графіки, використовуючи мову точок.

В принципі, гвпр проходить кожен вхідний граф, позначений $G, відвідуючи кожен вузол і ребро,
узгоджуючи його з правилами предикатів-дій, які надаються у програмі введення. Правила такі
оцінюється по порядку. Для кожного предиката, що оцінюється як істина, є відповідна дія
виконано. Під час обходу поточний вузол або ребро, яке відвідується, позначається $.

Для кожного вхідного графа є цільовий підграф, позначений $T, спочатку порожній і використаний
щоб накопичити вибрані сутності та вихідний графік, $O, використовується для остаточної обробки і потім
записується на вихід. За замовчуванням вихідний графік є цільовим графіком. Вихідний графік
можна встановити в програмі або, в обмеженому сенсі, в командному рядку.

ВАРІАНТИ


Підтримуються такі параметри:

-a аргументи
Рядок аргументи розбивається на лексеми, розділені пробілами, з окремим
маркери, доступні у вигляді рядків у гвпр програма як ARGV[0],...,ARGV[ARGC-1].
Символи пробілів у підрядках із одинарними або подвійними лапками або перед якими стоїть a
зворотний скіс, ігноруються як роздільники. Загалом символ зворотної косої риски вимикається
будь-яке спеціальне значення наступного символу. Зауважте, що маркери, отримані від
множинний -a прапори з’єднані.

-c Використовуйте вихідний графік як вихідний графік.

-i Виведіть індукований вузлом розширення підграфа вихідного графа в контексті
його кореневий графік.

-o вихідний файл
Записує вихідний потік у вказаний файл; за замовчуванням вихід є
записуються в stdout.

-f профіль
Використовуйте вміст зазначеного файлу як програму для виконання на вході. Якщо
профіль містить символ косої риски, ім'я береться як шлях до файлу.
Інакше гвпр використовуватиме каталоги, зазначені у змінній середовища
GVPRPATH щоб шукати файл. Якщо -f не дається, гвпр використовуватиме перший не-
аргумент параметра як програма.

-q Вимикає попереджувальні повідомлення.

-n Вимикає попереднє читання графіка. За замовчуванням змінна $NG встановлюється на наступний графік
підлягає обробці. Для цього потрібно прочитати наступний графік перед обробкою
поточний графік, який може блокуватися, якщо наступний графік створюється лише у відповідь на
деякі дії, що стосуються обробки поточного графіка.

-V Примушує програму роздрукувати інформацію про версію та вийти.

-? Примушує програму надрукувати інформацію про використання та вийти.

ОПЕРАНДИ


Підтримується наступний операнд:

файли Назви файлів, що містять 1 або більше графіків, на мові точок. Якщо ні -f варіант
задано, ім’я видаляється зі списку та використовується як програма введення.
Якщо список файлів порожній, stdin буде використовуватися.

ПРОГРАМИ


A гвпр Програма складається зі списку пропозицій предикатів-дій, які мають одну з форм:

ПОЧАТИ { дію }

BEG_G { дію }

N [ присудок ] { дію }

E [ присудок ] { дію }

END_G { дію }

END { дію }

Програма може містити щонайбільше одне з кожного з них ПОЧАТИ, END_G та END пункти. Там можна
бути будь-якою кількістю BEG_G, N та E твердження, перше застосоване до графіків, друге до
вузли, третій до ребер. Вони розділені на блоки, блок складається з
необов'язковий BEG_G заява і все N та E заяви до наступних BEG_G заява, якщо
будь-який. Семантика верхнього рівня a гвпр програми:

Оцініть значення ПОЧАТИ пункт, якщо є.
Для кожного вхідного графіка G {
Для кожного блоку {
Установка G як поточний графік і поточний об'єкт.
Оцініть значення BEG_G пункт, якщо є.
Для кожного вузла та краю в G {
Встановіть вузол або ребро як поточний об’єкт.
Оцініть значення N or E пункти, якщо це необхідно.
}
}
Установка G як поточний об'єкт.
Оцініть значення END_G пункт, якщо є.
}
Оцініть значення END пункт, якщо є.

Дії с ПОЧАТИ, BEG_G, END_G та END речення виконуються, коли речення є
оцінено. Для N or E речення, присудок або дію можуть бути опущені. Якщо там
не є предикатом з дією, дія виконується на кожному вузлі або ребрі, як
відповідний. Якщо дії немає, а предикат має значення істини, асоційований
вузол або ребро додається до цільового графа.

Блоки оцінюються в тому порядку, в якому вони зустрічаються. У межах блоку, N положення
(E речення відповідно) оцінюються в тому порядку, в якому відбуваються. Зауважте, однак,
що всередині блоку, N or E речення можуть бути переплетеними, залежно від порядку обходу.

Предикати та дії – це послідовності висловлювань на діалекті C, які підтримуються
експр(3) бібліотека. Єдина відмінність предикатів і дій полягає в тому, що перші
повинен мати тип, який можна інтерпретувати як істинний, або як хибний. Тут звичайний C
дотримується конвенція, в якій ненульове значення вважається істинним. Це включало б
непусті рядки та непорожні посилання на вузли, ребра тощо. Однак, якщо рядок може
буде перетворено в ціле число, використовується це значення.

На додаток до звичайних базових типів C (анулювати, Int, бак, плавати, довго, непідписаний та подвійний),
гвпр забезпечує рядок як синонім для char *, і типи на основі графів node_t, edge_t,
graph_t та obj_t, obj_t тип можна розглядати як супертип інших 3 бетонів
типи; правильний базовий тип підтримується динамічно. Крім цих базових типів,
лише інші підтримувані вирази типу є (асоціативними) масивами.

Константи слідують синтаксису C, але рядки можуть бути в лапках із будь-яким "..." or "...". гвпр
приймає коментарі C++, а також коментарі типу cpp. Для останнього, якщо рядок починається з
символ '#', решта рядка ігнорується.

Оператор може бути оголошенням функції, змінної чи масиву або виконуваним файлом
заяву. Для декларацій існує єдина область застосування. Оголошення масивів мають вигляд:

тип масив [ type0 ]

де type0 є необов'язковим. Якщо це вказано, синтаксичний аналізатор застосує весь масив
індекси мають вказаний тип. Якщо він не надається, можуть бути об’єкти всіх типів
використовуються як індекси. Як і в C, змінні та масиви повинні бути оголошені. Зокрема, ан
неоголошена змінна буде інтерпретуватися як ім'я атрибута вузла, ребра або
графік, залежно від контексту.

Виконувані оператори можуть бути одним із таких:

{ [ заяву ... ] }
вираз // заг було = вираз
if ( вираз ) заяву [ ще заяву ]
для( вираз ; вираз ; вираз ) заяву
для( масив [ було ]) заяву
forr( масив [ було ]) заяву
while ( вираз ) заяву
перемикач ( вираз ) випадок заяви
перерву [ вираз ]
продовжувати [ вираз ]
повертати [ вираз ]
Пункти в дужках є необов’язковими.

У другій формі та цінності заяву та forr твердження, змінна було встановлений в
кожне значення, що використовується як індекс у зазначеному масиві, а потім пов’язане заяву is
оцінено. Для числових і рядкових індексів індекси повертаються в збільшенні
(зменшується) числовий або лексикографічний порядок для та цінності (forr, відповідно). Цим можна скористатися
для сортування.

Визначення функцій можуть з’являтися лише в ПОЧАТИ пункт.

Вирази включають звичайні вирази C. Порівняння рядків за допомогою == та != лікувати
правий операнд як шаблон для збігу регулярних виразів. Візерунки
використання ksh(1) синтаксис шаблону відповідності файлу. (Для простої рівності рядків використовуйте strcmp
функції.

гвпр спробує використати вираз у вигляді рядка або числового значення відповідно до необхідності. Обидва
С-подібні приведення та шаблони функцій призведуть до виконання перетворень, якщо це можливо.

Вирази графічного типу (тобто, graph_t, node_t, edge_t, obj_t) може супроводжуватися a
польова довідка у вигляді .ім'я. Отримане значення є значенням атрибута
названий ім'я даного об'єкта. Крім того, у певних контекстах незадекларована,
незмінений ідентифікатор вважається ім'ям атрибута. Зокрема, такі ідентифікатори
позначають атрибути поточного вузла або ребра відповідно в N та E пункти, та
поточний графік в BEG_G та END_G статті.

Як зазвичай в libcgraph(3) модель, атрибути мають рядкові значення. В додаток, гвпр
підтримує певні псевдоатрибути об'єктів графіка, не обов'язково з рядковими значеннями. Ці
відображають внутрішні властивості об'єктів графіка і не можуть бути встановлені користувачем.

голова : node_t
головка краю.

хвіст : node_t
хвіст краю.

ім'я : рядок
ім'я ребра, вузла або графа. Ім'я краю має вигляд "<хвіст-
ім'я>[]", де є "->"Або"--" в залежності від
напрямний графік чи ні. Частина кронштейна [] з’являється лише в тому випадку, якщо
edge має нетривіальний ключ.

ступінь : Int
ступінь вузла.

вищий ступінь : Int
зовнішній ступінь вузла.

ступінь : Int
ступінь вузла.

корінь : graph_t
кореневий графік об'єкта. Корінь кореневого графа сам є.

батько : graph_t
батьківський граф підграфа. Батьківським є кореневий граф NULL

n_edges : Int
кількість ребер у графі

n_вузлів : Int
кількість вузлів у графі

спрямований : Int
true (не нуль), якщо графік орієнтований

строгий : Int
true (не нуль), якщо графік суворий

ВСТРОЕНИЙ ФУНКЦІЇ


Наступні функції вбудовані гвпр. Ці функції повертають посилання на графік
повертаються об’єкти NULL у разі невдачі.

діаграми та підграф
графік(s : рядок, t : рядок): graph_t
створює графік, ім’я якого s і чий тип визначається рядком t.
Ігноруючи регістр, символи U, D, S, N мають непряме тлумачення,
спрямований, суворий і несуворий відповідно. Якщо t порожній, спрямований, не-
генерується строгий графік.

субг(g : graph_t, s : рядок): graph_t
створює підграф у графі g з іменем s. Якщо підграф уже існує, він є
повернувся.

isSubg(g : graph_t, s : рядок): graph_t
повертає підграф у графі g з іменем s, якщо він існує, або NULL інакше.

fstsubg(g : graph_t): graph_t
повертає перший підграф у графі gабо NULL якщо жодного не існує.

nxtsubg(sg : graph_t): graph_t
повертає наступний підграф після sgабо NULL.

є Direct(g : graph_t): Int
повертає true тоді і тільки тоді, коли g спрямований.

є Строгим(g : graph_t): Int
повертає true тоді і тільки тоді, коли g є суворим.

nВузли(g : graph_t): Int
повертає кількість вузлів в g.

Краї(g : graph_t): Int
повертає кількість ребер у g.

Nodes
вузол(sg : graph_t, s : рядок): node_t
створює вузол у графі g імені s. Якщо такий вузол уже існує, він повертається.

підвузол(sg : graph_t, n : node_t): node_t
вставляє вузол n у підграф g. Повертає вузол.

fstnode(g : graph_t): node_t
повертає перший вузол у графі gабо NULL якщо жодного не існує.

nxnode(n : node_t): node_t
повертає наступний вузол після n в кореневому графіку, або NULL.

nxtnode_sg(sg : graph_t, n : node_t): node_t
повертає наступний вузол після n in sgабо NULL.

isNode(sg : graph_t, s : рядок): node_t
шукає вузол у (під)графі sg імені s. Якщо такий вузол існує, він повертається.
Інакше NULL повертається

єпідвузол(sg : graph_t, n : node_t): Int
повертає ненульовий вузол if n знаходиться в (під)графі sg, або нуль інакше.

indegreeOf(sg : graph_t, n : node_t): Int
повертає ступінь вузла n в (під)граф sg.

outdegreeOf(sg : graph_t, n : node_t): Int
повертає зовнішній ступінь вузла n в (під)граф sg.

ступіньОф(sg : graph_t, n : node_t): Int
повертає ступінь вузла n в (під)граф sg.

Краї
край(t : node_t, h : node_t, s : рядок): edge_t
створює край з хвостовим вузлом t, головний вузол h та ім'я s в кореневому графіку. Якщо
граф не орієнтований, відмінність між головним і хвостовим вузлами неважлива.
Якщо таке ребро вже існує, воно повертається.

edge_sg(sg : graph_t, t : node_t, h : node_t, s : рядок): edge_t
створює край з хвостовим вузлом t, головний вузол h та ім'я s в (під)граф sg (і все
батьківські графіки). Якщо граф не орієнтований, розрізняють голову і хвіст
вузли неважливо. Якщо таке ребро вже існує, воно повертається.

підвісок(g : graph_t, e : edge_t): edge_t
вставляє край e у підграф g. Повертає край.

isEdge(t : node_t, h : node_t, s : рядок): edge_t
шукає край з хвостовим вузлом t, головний вузол h та ім'я s. Якщо графік є
ненаправлені, відмінність між головним і хвостовим вузлами неважлива. Якщо такий
edge існує, воно повертається. інакше NULL повертається

isEdge_sg(sg : graph_t, t : node_t, h : node_t, s : рядок): edge_t
шукає край з хвостовим вузлом t, головний вузол h та ім'я s в (під)граф sg, Якщо
граф не орієнтований, відмінність між головним і хвостовим вузлами неважлива.
Якщо таке ребро існує, воно повертається. інакше NULL повертається

єSubedge(g : graph_t, e : edge_t): Int
повертає відмінне від нуля, якщо ребро e знаходиться в (під)графі sg, або нуль інакше.

fstout(n : node_t): edge_t
повертає перший край вузла n в кореневому графіку.

fstout_sg(sg : graph_t, n : node_t): edge_t
повертає перший край вузла n в (під)граф sg.

nxtout(e : edge_t): edge_t
повертає наступний вихід після e в кореневому графіку.

nxtout_sg(sg : graph_t, e : edge_t): edge_t
повертає наступний вихід після e в графі sg.

fstin(n : node_t): edge_t
повертає перший край вузла n в кореневому графіку.

fstin_sg(sg : graph_t, n : node_t): edge_t
повертає перший край вузла n в графі sg.

nxtin(e : edge_t): edge_t
повертає наступне ребро після e в кореневому графіку.

nxtin_sg(sg : graph_t, e : edge_t): edge_t
повертає наступне ребро після e в графі sg.

fstedge(n : node_t): edge_t
повертає перше ребро вузла n в кореневому графіку.

fstedge_sg(sg : graph_t, n : node_t): edge_t
повертає перше ребро вузла n в графі sg.

nxtedge(e : edge_t, node_t): edge_t
повертає наступне ребро після e в кореневому графіку.

nxtedge_sg(sg : graph_t, e : edge_t, node_t): edge_t
повертає наступне ребро після e на графіку sg.

OPP(e : edge_t, node_t): node_t
повертає вузол на краю e не дорівнює n. Повертає NULL, якщо n не є вузлом
e. Це може бути корисно при використанні fstedge та nxtedge перерахувати сусідів
n.

Графік I / O
запис(g : graph_t): анулювати
друк g у форматі точки на вихідний потік.

напиши G(g : graph_t, fname : рядок): анулювати
друк g у форматі точки у файл fname.

fwriteG(g : graph_t, fd : Int): анулювати
друк g у форматі точки на відкритий потік, позначений цілим числом fd.

читати G(fname : рядок): graph_t
повертає графік, прочитаний з файлу fname. Графік має бути у форматі точки. Якщо ні
графік можна читати, NULL повертається

freadG(fd : Int): graph_t
повертає наступний графік, прочитаний з відкритого потоку fd. Повертає NULL в кінці файлу.

Графік різноманітні
видаляти(g : graph_t, x : obj_t): анулювати
видаляє об’єкт x з графіка g. Якщо g is NULL, функція використовує кореневий графік
x. Якщо x є графом або підграфом, він закритий, якщо x заблоковано.

є в(g : graph_t, x : obj_t): Int
повертає true, якщо x знаходиться в підграфі g.

cloneG(g : graph_t, s : рядок): graph_t
створює клон графа g з ім'ям s. Якщо s є "", створений графік має
те саме ім'я, що g.

клон(g : graph_t, x : obj_t): obj_t
створює клон об’єкта x в графі g. Зокрема, те саме має новий об’єкт
атрибути ім'я/значення та структура як вихідний об'єкт. Якщо об’єкт з
такий же ключ, як x вже існує, його атрибути накладаються атрибутами of x і
об’єкт повертається. Якщо ребро клонується, обидві кінцеві точки неявно клонуються.
Якщо граф клонується, усі вузли, ребра та підграфи неявно клонуються. Якщо x
є графіком, g може бути NULL, у цьому випадку клонований об’єкт буде новим коренем
графік. У цьому випадку виклик еквівалентний cloneG(x,"").

скопіювати(g : graph_t, x : obj_t): obj_t
створює копію об'єкта x в графі g, де новий об’єкт має те саме ім’я/значення
атрибути як вихідний об'єкт. Якщо об’єкт з таким же ключем, як x вже
існує, його атрибути накладаються на атрибути x і об’єкт повертається. Примітка
що це неглибока копія. Якщо x є графом, жоден з його вузлів, ребер або підграфів
копіюються в новий графік. Якщо x є ребром, кінцеві точки створюються, якщо
необхідні, але вони не клоновані. Якщо x є графіком, g може бути NULL, У якому випадку
клонований об'єкт буде новим кореневим графом.

копія А(SRC : obj_t, tgt : obj_t): Int
копіює атрибути об’єкта SRC заперечувати tgt, перезаписуючи будь-які значення атрибутів
tgt спочатку може мати.

індукувати(g : graph_t): анулювати
продовжується g до його індукованого вузлом розширення підграфа в кореневому графі.

hasAttr(SRC : obj_t, ім'я : рядок): Int
повертає ненульовий об’єкт if SRC має атрибут, ім’я якого є ім'я. Він повертає 0
інакше.

isAttr(g : graph_t, вид : рядок, ім'я : рядок): Int
повертає відмінний від нуля, якщо атрибут ім'я було визначено в g для об'єктів в
даний вид. Для вузлів, ребер і графіків, вид має бути "N", "E" і "G",
відповідно. В іншому випадку він повертає 0.

вік(SRC : obj_t, ім'я : рядок): рядок
повертає значення атрибута ім'я в об'єкті SRC. Це корисно для таких випадків
коли ім'я конфліктує з одним із ключових слів, наприклад «голова» або «корінь». Якщо
атрибут не був оголошений на графіку, функція ініціалізує його
значення за замовчуванням "". Щоб уникнути цього, слід використовувати hasAttr or isAttr функція
щоб перевірити, чи існує атрибут.

набір(SRC : obj_t, ім'я : рядок, значення : рядок): Int
встановлює значення атрибута ім'я в об'єкті SRC до значення. У разі успіху повертає 0,
відмінний від нуля при відмови. Побачити вік вище.

getDflt(g : graph_t, вид : рядок, ім'я : рядок): рядок
повертає значення атрибута за замовчуванням ім'я в об'єктах в g даного вид. Форум
вузли, ребра та графіки, вид має бути "N", "E" і "G" відповідно. Якщо
атрибут не був оголошений на графіку, функція ініціалізує його
значення за замовчуванням "". Щоб уникнути цього, слід використовувати isAttr функція для перевірки
що атрибут існує.

setDflt(g : graph_t, вид : рядок, ім'я : рядок, значення : рядок): Int
встановлює значення атрибута за замовчуванням ім'я до значення в об'єктах в g даного
вид. Для вузлів, ребер і графіків, вид має бути "N", "E" і "G" відповідно.
Повертає 0 при успіху, відмінний від нуля при невдачі. Побачити getDflt вище.

fstAttr(g : graph_t, вид : рядок): рядок
повертає ім’я першого атрибута об’єктів у g даного вид. Форум
вузли, ребра та графіки, вид має бути "N", "E" і "G" відповідно. Якщо там
немає атрибутів, повертається рядок "".

nxtAttr(g : graph_t, вид : рядок, ім'я : рядок): рядок
повертає назву наступного атрибута об’єктів в g даного вид після
атрибут ім'я. Аргумент ім'я має бути ім'ям існуючого атрибута; це
зазвичай буде значенням, що повертається попереднього виклику до fstAttr or nxtAttr. Форум
вузли, ребра та графіки, вид має бути "N", "E" і "G" відповідно. Якщо там
атрибутів не залишилося, повертається рядок "".

compOf(g : graph_t, n : node_t): graph_t
повертає зв’язний компонент графа g містить вузол n, як підграф
g. Підграф містить лише вузли. Можна використовувати індукувати щоб додати краї. The
функція не працює і повертається NULL if n не в g. Підключення засноване на
базовий неорієнтований граф g.

типу(об'єкт : obj_t): рядок
повертає вказівку типу об'єкт. Для вузлів, ребер і графіків він повертається
«N», «E» і «G» відповідно.

замикати(g : graph_t, v : Int): Int
реалізує блокування графів на кореневих графах. Якщо ціле число v є додатним, графік є
налаштувати так, щоб майбутні виклики видаляти не мають негайного ефекту. Якщо v дорівнює нулю,
графік розблоковано. Якщо був виклик видалити графік, коли він був
заблоковано, графік закритий. Якщо v негативний, нічого не робиться. У всіх випадках
повертається попереднє значення блокування.

Рядки
спринт(fmt : рядок, ...): рядок
повертає рядок, отриманий у результаті форматування значень виразів
відбуваються після fmt згідно printf(3) формат fmt

gsub(вул : рядок, поплескування : рядок): рядок

gsub(вул : рядок, поплескування : рядок, репл : рядок): рядок
Умови повернення вул зі збігом усіх підрядків поплескування видалено або замінено на репл,
відповідно.

нижче(вул : рядок, поплескування : рядок): рядок

нижче(вул : рядок, поплескування : рядок, репл : рядок): рядок
Умови повернення вул із відповідністю крайнього лівого підрядка поплескування видалено або замінено на репл,
відповідно. Символи '^' і '$' можуть використовуватися на початку і в кінці,
відповідно, оф поплескування щоб прив’язати шаблон до початку або кінця вул.

субстр(вул : рядок, idx : Int): рядок

субстр(вул : рядок, idx : Int, довжина : Int): рядок
повертає підрядок вул починаючи з положення idx до кінця струни або
довжини довжина, відповідно. Індексування починається з 0. Якщо idx є негативним або idx is
більша за довжину вул, відбувається фатальна помилка. Так само і в другому
випадок, якщо довжина є негативним або idx + довжина більша за довжину вул, фатальний
виникає помилка.

strcmp(s1 : рядок, s2 : рядок): Int
забезпечує стандартну функцію C strcmp(3).

(s : рядок): Int
повертає довжину рядка s.

індекс(s : рядок, t : рядок): Int

індекс(s : рядок, t : рядок): Int
повертає індекс символу в рядку s де крайня ліва (крайня права) копія
рядка t можна знайти, або -1 якщо t не є підрядком s.

матч(s : рядок, p : рядок): Int
повертає індекс символу в рядку s де крайній лівий збіг узору
p можна знайти, або -1, якщо немає підрядка s сірники p.

топпер(s : рядок): рядок
повертає версію s з алфавітними символами, перетвореними у верхній регістр.

знизити(s : рядок): рядок
повертає версію s з алфавітними символами, перетвореними на нижній регістр.

канон(s : рядок): рядок
повертає версію s доцільно використовувати як ідентифікатор у файлі з точками.

HTML(g : graph_t, s : рядок): рядок
повертає "магічну" версію s як рядок HTML. До цього зазвичай звикають
прикріпити мітку, подібну до HTML, до об’єкта графіка. Зауважте, що повернутий рядок живе в
g. Зокрема, він буде звільнений, коли g закрито, і діяти як рядок HTML,
його потрібно використовувати з об’єктом g. Крім того, зверніть увагу, що кутова дужка
цитати не повинні бути частиною s. Вони будуть додані, якщо g написано конкретною DOT
Формат.

ishtml(s : рядок): Int
повертає відмінний від нуля тоді і тільки тоді, коли s це рядок HTML.

xOf(s : рядок): рядок
повертає рядок "x"якщо s має вигляд "x,y», де обидва x та y є числовими.

yOf(s : рядок): рядок
повертає рядок "y"якщо s має вигляд "x,y», де обидва x та y є числовими.

llOf(s : рядок): рядок
повертає рядок "llx,lly"якщо s має вигляд "llx,lly,urx,ури», де всі llx,
lly, urx та ури є числовими.

urOf(s)
urOf(s : рядок): рядок повертає рядок "urx,ури"якщо s має форму
"llx,lly,urx,ури», де всі llx, lly, urx та ури є числовими.

sscanf(s : рядок, fmt : рядок, ...): Int
сканує рядок s, витягуючи значення відповідно до sscanf(3) формат fmt,
значення зберігаються в наступних адресах fmt, адреси, що мають форму &v,
де v це деяка оголошена змінна правильного типу. Повертає кількість елементів
успішно відскановано.

розкол(s : рядок, обр : масив, сепс : рядок): Int

розкол(s : рядок, обр : масив): Int

лексеми(s : рядок, обр : масив, сепс : рядок): Int

лексеми(s : рядок, обр : масив): Int
Команда розкол функція розриває рядок s на поля, в той час як лексеми функція
розбиває рядок на токени. Поле складається з усіх нероздільних символів
між двома символами роздільника або початком чи кінцем рядка. Таким чином, а
поле може бути порожнім рядком. Токен — це максимальний непорожній підрядок ні
що містить роздільний символ. Розділювачами є символи, наведені в
сепс аргумент. Якщо сепс не надається, значення за замовчуванням — " \t\n". The
функції повертають кількість полів або маркерів.

Поля та маркери зберігаються в масиві аргументів. Масив повинен бути рядок-
значення і, якщо вказано тип індексу, він повинен бути Int. Записи індексуються
послідовними цілими числами, починаючи з 0. Будь-які значення, які вже збережені в масиві, будуть
бути або перезаписаним, або все ще присутнім після повернення функції.

I / O
друк(...): анулювати
друкувати ( експр, ... ) друкує рядкове представлення кожного аргументу по черзі
stdout, а потім новий рядок.

printf(fmt : рядок, ...): Int

printf(fd : Int, fmt : рядок, ...): Int
друкує рядок, отриманий у результаті форматування значень наступних виразів
fmt згідно printf(3) формат fmt. У разі успіху повертає 0. За замовчуванням це
друкує на stdout. Якщо необов’язкове ціле число fd дається, вихід записується на
відкритий потік, пов’язаний з fd.

scanf(fmt : рядок, ...): Int

scanf(fd : Int, fmt : рядок, ...): Int
сканує значення з вхідного потоку відповідно до scanf(3) формат fmt,
значення зберігаються в наступних адресах fmt, адреси, що мають форму &v,
де v це деяка оголошена змінна правильного типу. За замовчуванням він читає з
stdin. Якщо необов’язкове ціле число fd дається, вхід зчитується з відкритого потоку
пов'язаний з fd. Повертає кількість успішно відсканованих елементів.

openF(s : рядок, t : рядок): Int
відкриває файл s як потік вводу-виводу. Аргумент рядка t вказує, як файл
відкрито. Аргументи такі ж, як і для функції C fopen(3). Він повертає an
ціле число, що позначає потік, або -1 у разі помилки.

Як зазвичай, потоки 0, 1 і 2 вже відкриті як stdin, stdout та stderr,
відповідно. Так як гвпр може використовувати stdin щоб прочитати вхідні графіки, користувач повинен
уникайте використання цього потоку.

закритиF(fd : Int): Int
закриває відкритий потік, позначений цілим числом fd. Потоків 0, 1 і 2 бути не може
зачинено. У разі успіху повертає 0.

читати Л(fd : Int): рядок
повертає наступний рядок, прочитаний з вхідного потоку fd. Він повертає порожній рядок ""
в кінці файлу. Зверніть увагу, що символ нового рядка залишається у поверненому рядку.

Математика
ехр(d : подвійний): подвійний
повертає e до dго влади.

журнал(d : подвійний): подвійний
повертає натуральний журнал d.

кв(d : подвійний): подвійний
повертає квадратний корінь з подвійного d.

військовополонений(d : подвійний, x : подвійний): подвійний
Умови повернення d піднято до xго влади.

ство(d : подвійний): подвійний
повертає косинус d.

гріх(d : подвійний): подвійний
повертає синус d.

атан2(y : подвійний, x : подвійний): подвійний
повертає арктангенс р / х в діапазоні -pi до pi.

MIN(y : подвійний, x : подвійний): подвійний
повертає мінімум y та x.

MAX(y : подвійний, x : подвійний): подвійний
повертає максимальне значення y та x.

Асоціативний Масиви
# обр : Int
повертає кількість елементів у масиві обр.

idx in обр : Int
повертає 1, якщо для індексу встановлено значення idx в масиві обр. Він повертає 0
інакше.

скасовано(v : масив, idx): Int
видаляє елемент, проіндексований idx. Він повертає 1, якщо елемент існував, 0 — інакше.

скасовано(v : масив): анулювати
повторно ініціалізує масив.

Різне
вихід(v : Int): анулювати
Причини гвпр щоб вийти за допомогою коду виходу v.

система(CMD : рядок): Int
забезпечує стандартну функцію C система(3). Це виконується CMD в оболонці користувача
середовища та повертає статус виходу оболонки.

рядок(): подвійний
повертає псевдовипадкове подвійне значення між 0 і 1.

сранд(): Int

сранд(v : Int): Int
встановлює початкове значення для генератора випадкових чисел. Необов'язковий аргумент дає насіння;
якщо його пропущено, використовується поточний час. Повертається попереднє початкове значення.
сранд слід зателефонувати перед будь-якими дзвінками до рядок.

colorx(color : рядок, fmt : рядок): рядок
переводить колір з одного формату в інший. The color аргумент повинен бути кольором
в одному з розпізнаних рядкових представлень. The fmt значення має бути одним із
«RGB», «RGBA», «HSV» або «HSVA». При помилці повертається порожній рядок.

ВСТРОЕНИЙ ЗМІННІ


гвпр надає певні спеціальні вбудовані змінні, значення яких встановлюються автоматично
гвпр залежно від контексту. За винятком зазначеного, користувач не може змінювати свої значення.

$ : obj_t
позначає поточний об’єкт (вузол, ребро, граф) залежно від контексту. Це не
доступні в ПОЧАТИ or END статті.

$F : рядок
це ім'я поточного вхідного файлу.

$G : graph_t
позначає поточний графік, що обробляється. Він недоступний у ПОЧАТИ or END
статті.

$NG : graph_t
позначає наступний графік для обробки. Якщо $NG є NULL, поточний графік $G є
останній графік. Зауважте, що якщо вхід надходить із стандартного входу, останній графік не може бути
визначається до закриття вхідної труби. Він недоступний у ПОЧАТИ or END
пункти, або якщо -n використовується прапор.

$O : graph_t
позначає вихідний графік. Перед обходом графа він ініціалізується до цільового значення
графік. Після обходу і будь-якого END_G дії, якщо це стосується непустого графіка,
цей графік друкується у вихідному потокі. Він діє лише в N, E та END_G
пункти. Вихідний графік може бути встановлений користувачем.

$T : graph_t
позначає поточний цільовий графік. Це підграф $G і доступний тільки в
N, E та END_G статті.

$tgtname : рядок
позначає назву цільового графа. За замовчуванням встановлено значення "gvpr_result". Якщо
використовувався кілька разів під час виконання гвпр, ім'я буде доповнено символом
ціле число. Цю змінну може встановити користувач.

$tvroot : node_t
вказує початковий вузол для (спрямованого або ненаправленого) в глибину або в ширину
перший обхід графіка (див. $tvtype нижче). Значенням за замовчуванням є NULL та цінності
кожен вхідний графік. Після обходу за даним коренем, якщо значення $tvroot
змінився, новий обхід почнеться з новим значенням $tvroot. Також набір
$tvnext нижче.

$tvnext : node_t
вказує наступний початковий вузол для (спрямованого чи ненаправленого) у глибину або
Обхід графа в ширину (див. $tvtype нижче). Якщо обхід закінчується
і $tvroot не було скинуто, але $tvnext було встановлено, але не використовується, це
вузол буде використовуватися як наступний вибір для $tvroot. Значення за замовчуванням - NULL та цінності
кожен вхідний графік.

$tvedge : edge_t
Для обходів BFS та DFS це встановлюється на межу, яка використовується для досягнення поточного
вузол або край. На початку обходу або для інших типів обходу
значення є NULL.

$tvtype : tvtype_t
вказує як гвпр проходить по графу. Він може приймати лише одне з постійних значень
з попередньою назвою "TV_", описаною нижче. ТВ_квартира є типовим.

У базовій бібліотеці графів cgraph(3), ребра в неорієнтованих графах задано an
довільний напрямок. Це використовується для обходів, наприклад TV_fwd, вимагаючи
спрямовані краї.

ARGC : Int
позначає кількість аргументів, визначених параметром -a аргументи аргумент командного рядка.

ARGV : рядок масив
позначає масив аргументів, заданий параметром -a аргументи аргумент командного рядка. The
iий аргумент надається за допомогою ARGV[i].

ВСТРОЕНИЙ КОНСТАНТИ


Існує кілька символічних констант, визначених гвпр.

NULL : obj_t
нульове посилання на об’єкт, еквівалентне 0.

ТВ_квартира : tvtype_t
простий плоский обхід з об’єктами графіка, які відвідуються в, здавалося б, довільному порядку.

TV_ne : tvtype_t
обхід, який спочатку відвідує всі вузли, а потім усі ребра.

TV_en : tvtype_t
обхід, який спочатку відвідує всі ребра, а потім усі вузли.

TV_dfs : tvtype_t
TV_postdfs : tvtype_t
TV_prepostdfs : tvtype_t
обхід графа за допомогою пошуку в глибину на базовому неорієнтованому
графік. Щоб зробити обхід, гвпр перевірятиме значення $tvroot. Якщо це має
таке ж значення, що воно було раніше (на початку ініціалізується попереднє значення
до NULL.), гвпр просто шукатиме якийсь невідвідуваний вузол і обходить його підключений
компонент. З іншого боку, якщо $tvroot змінився його підключений компонент
оглянути, припускаючи, що його раніше не відвідували або, якщо $tvroot is NULL,
обхід зупиниться. Зверніть увагу, що використовуючи TV_dfs та $tvroot, можна створити
нескінченний цикл.

За замовчуванням обхід здійснюється за попереднім замовленням. Тобто вузол відвідується раніше
всі його невідвідувані краї. Для TV_postdfs, усі невідвідувані ребра вузла є
відвідали перед вузлом. Для TV_prepostdfs, вузол відвідується двічі, перед і
після всіх його невідвідуваних країв.

TV_fwd : tvtype_t
TV_postfwd : tvtype_t
TV_prepostfwd : tvtype_t
Обхід графіка з використанням пошуку в глибину лише на наступному графіку
передні дуги. Вибір коренів для обходу такий самий, як описано для
TV_dfs вище. Інший порядок відвідування визначений TV_fwd, TV_postfwd
та TV_prepostfwd такі ж, як і ті, які визначені аналогічними обходами
TV_dfs, TV_postdfs та TV_prepostdfs.

TV_rev : tvtype_t
TV_postrev : tvtype_t
TV_prepostrev : tvtype_t
Обхід графіка з використанням пошуку в глибину лише на наступному графіку
зворотні дуги. Вибір коренів для обходу такий самий, як описано для
TV_dfs вище. Інший порядок відвідування визначений TV_rev, TV_postrev
та TV_prepostrev такі ж, як і ті, які визначені аналогічними обходами
TV_dfs, TV_postdfs та TV_prepostdfs.

TV_bfs : tvtype_t
Обхід графа за допомогою пошуку в ширину на графі, ігноруючи ребро
напрямки. Дивіться елемент на TV_dfs вище для ролі $tvroot.

ПРИКЛАДИ


гвпр -i 'N[color=="синій"]' file.gv

Згенеруйте індукований вузлом підграф усіх вузлів із синім кольором.

гвпр -c 'N[color=="blue"]{колір = "червоний"}' file.gv

Зробіть всі сині вузли червоними.

ПОЧАТИ { Int n, e; Int тот_н = 0; Int tot_e = 0; }
BEG_G {
n = nNodes($G);
e = nEdges($G);
printf ("%d вузли %d краю %s\n", n, e, $G.name);
тот_н += n;
tot_e += e;
}
END { printf ("%d вузли %d краю всього\n", tot_n, tot_e) }

Версія програми gc.

гвпр -c ""

Дорівнює nop.

BEG_G { graph_t g = графік ("злиття", "S"); }
E {
node_t h = клон (g,$.head);
node_t t = clone(g,$.tail);
edge_t e = край (t,h,"");
e.вага = e.вага + 1;
}
END_G { $O = g; }

Створює строгу версію вхідного графа, де атрибут ваги ребра
вказує, скільки ребер у вхідному графі представляє ребро.

ПОЧАТИ {node_t n; Int град[]}
E{deg[head]++; deg[хвіст]++; }
END_G {
та цінності (град[н]) {
printf ("deg[%s] = %d\n", n.name, град[н]);
}
}

Обчислює ступені вузлів з ребрами.

ПОЧАТИ {
Int i, відступ;
Int seen[рядок];
анулювати prInd (між cnt) {
та цінності (i = 0; i < cnt; я++) printf (" ");
}
}
BEG_G {

$tvtype = TV_prepostfwd;
$tvroot = вузол($,ARGV[0]);
}
N {
if (переглянуто [$.name]) відступ--;
ще {
prInd(відступ);
друк ($.name);
бачив [$.name] = 1;
відступ++;
}
}

Друкує обхід графа в глибину, починаючи з вузла, ім’я якого
ARGV[0], як список з відступом.

НАВКОЛИШНЄ СЕРЕДОВИЩЕ


GVPRPATH
Розділений двокрапкою список каталогів, які потрібно шукати, щоб знайти вказаний файл
параметр -f. гвпр має вбудований список за замовчуванням. Якщо GVPRPATH не визначено,
використовується список за замовчуванням. Якщо GVPRPATH починається з двокрапки, список формується за допомогою
додавання GVPRPATH до списку за замовчуванням. Якщо GVPRPATH закінчується двокрапкою, список є
формується шляхом додавання списку за замовчуванням до GVPRPATH. Інакше GVPRPATH використовується для
список.

У системах Windows замініть "двокрапку" на "крапку з комою" в попередньому абзаці.

Використовуйте gvpr онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

Команди Linux

Ad