-
Notifications
You must be signed in to change notification settings - Fork 64
dot_parser
czen edited this page Oct 9, 2018
·
4 revisions
disclaimer требования к заданию описаны не полностью и должны уточняться по ходу работы (git pull request, комментарии к коммитам, тестам и т.п.)
Dot- язык описания графов
- Реализовать парсер подможества языка Dot:
- Направленные и не направленные графы
- метки (атрибуты) узлов
- комментарии
graph : [ strict ] (graph | digraph) [ ID ] '{' stmt_list '}'
stmt_list : [ stmt [ ';' ] stmt_list ]
stmt : node_stmt
| edge_stmt
| attr_stmt
| ID '=' ID
| subgraph
attr_stmt : (graph | node | edge) attr_list
attr_list : '[' [ a_list ] ']' [ attr_list ]
a_list : ID '=' ID [ (';' | ',') ] [ a_list ]
edge_stmt : (node_id | subgraph) edgeRHS [ attr_list ]
edgeRHS : edgeop (node_id | subgraph) [ edgeRHS ]
node_stmt : node_id [ attr_list ]
node_id : ID [ port ]
port : ':' ID [ ':' compass_pt ]
| ':' compass_pt
subgraph : [ subgraph [ ID ] ] '{' stmt_list '}'
compass_pt : (n | ne | e | se | s | sw | w | nw | c | _)
Пример:
graph ethane {
C_0 -- H_0 [type=s];
C_0 -- H_1 [type=s];
C_0 -- H_2 [type=s];
C_0 -- C_1 [type=s];
C_1 -- H_3 [type=s];
C_1 -- H_4 [type=s];
C_1 -- H_5 [type=s];
}
Найти готовый парсер языка Dot и написать визитор по синтаксическому дереву, который бы формировал несколько представлений графа и выводил их в файл:
- матрицу смежности
- список инцидентности
- список ребер
Найти готовый парсер языка Dot и написать визитор по синтаксическому дереву, который разбивал бы его на несколько файлов по компонентам связности.