gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r22924 - in gnunet/src: include regex


From: gnunet
Subject: [GNUnet-SVN] r22924 - in gnunet/src: include regex
Date: Thu, 26 Jul 2012 15:32:08 +0200

Author: szengel
Date: 2012-07-26 15:32:08 +0200 (Thu, 26 Jul 2012)
New Revision: 22924

Modified:
   gnunet/src/include/gnunet_regex_lib.h
   gnunet/src/regex/regex.c
   gnunet/src/regex/regex_graph.c
Log:
- Added coloring option to graph saving.
- Fixed a bug causing NFAs not to print properly.


Modified: gnunet/src/include/gnunet_regex_lib.h
===================================================================
--- gnunet/src/include/gnunet_regex_lib.h       2012-07-26 13:00:56 UTC (rev 
22923)
+++ gnunet/src/include/gnunet_regex_lib.h       2012-07-26 13:32:08 UTC (rev 
22924)
@@ -95,18 +95,42 @@
 
 
 /**
- * Save the given automaton as a GraphViz dot file
+ * Options for graph creation function
+ * GNUNET_REGEX_automaton_save_graph.
+ */
+
+enum GNUNET_REGEX_GraphSavingOptions
+{
+  /**
+   * Default. Do nothing special.
+   */
+  GNUNET_REGEX_GRAPH_DEFAULT = 0,
+
+  /**
+   * The generated graph will include extra information such as the NFA states
+   * that were used to generate the DFA state.
+   */
+  GNUNET_REGEX_GRAPH_VERBOSE = 1,
+
+  /**
+   * Enable graph coloring. Will color each SCC in a different color.
+   */
+  GNUNET_REGEX_GRAPH_COLORING = 2
+};
+
+
+/**
+ * Save the given automaton as a GraphViz dot file.
  *
- * @param a the automaton to be saved
- * @param filename where to save the file
- * @param verbose if set to GNUNET_YES the generated graph will include extra
- *                information such as the NFA states that were used to generate
- *                the DFA state etc.
+ * @param a the automaton to be saved.
+ * @param filename where to save the file.
+ * @param options options for graph generation that include coloring or verbose
+ *                mode
  */
 void
 GNUNET_REGEX_automaton_save_graph (struct GNUNET_REGEX_Automaton *a,
                                    const char *filename,
-                                   int verbose);
+                                   enum GNUNET_REGEX_GraphSavingOptions 
options);
 
 
 /**
@@ -192,4 +216,3 @@
 
 /* end of gnunet_regex_lib.h */
 #endif
-

Modified: gnunet/src/regex/regex.c
===================================================================
--- gnunet/src/regex/regex.c    2012-07-26 13:00:56 UTC (rev 22923)
+++ gnunet/src/regex/regex.c    2012-07-26 13:32:08 UTC (rev 22924)
@@ -766,7 +766,8 @@
   struct GNUNET_REGEX_State **states = cls;
 
   s->proof_id = count;
-  states[count] = s;
+  if (NULL != states)
+    states[count] = s;
 }
 
 
@@ -1914,7 +1915,7 @@
   struct GNUNET_REGEX_State *end;
 
   a = ctx->stack_tail;
-  
+
   if (NULL == a)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -2174,6 +2175,9 @@
 
   nfa->regex = GNUNET_strdup (regex);
 
+  /* create depth-first numbering of the states for pretty printing */
+  GNUNET_REGEX_automaton_traverse (nfa, &number_states, NULL);
+
   return nfa;
 
 error:

Modified: gnunet/src/regex/regex_graph.c
===================================================================
--- gnunet/src/regex/regex_graph.c      2012-07-26 13:00:56 UTC (rev 22923)
+++ gnunet/src/regex/regex_graph.c      2012-07-26 13:32:08 UTC (rev 22924)
@@ -42,6 +42,11 @@
    * the graph.
    */
   int verbose;
+
+  /**
+   * Coloring flag, if set to GNUNET_YES SCCs will be colored.
+   */
+  int coloring;
 };
 
 
@@ -169,15 +174,27 @@
 
   if (s->accepting)
   {
-    GNUNET_asprintf (&s_acc,
-                     "\"%s\" [shape=doublecircle, color=\"0.%i 0.8 0.95\"];\n",
-                     name, s->scc_id);
+    if (GNUNET_YES == ctx->coloring)
+    {
+      GNUNET_asprintf (&s_acc,
+                       "\"%s\" [shape=doublecircle, color=\"0.%i 0.8 
0.95\"];\n",
+                       name, s->scc_id);
+    }
+    else
+    {
+      GNUNET_asprintf (&s_acc, "\"%s\" [shape=doublecircle];\n", name,
+                       s->scc_id);
+    }
   }
-  else
+  else if (GNUNET_YES == ctx->coloring)
   {
-    GNUNET_asprintf (&s_acc, "\"%s\" [color=\"0.%i 0.8 0.95\"];\n", name,
+    GNUNET_asprintf (&s_acc, "\"%s\" [shape=circle, color=\"0.%i 0.8 
0.95\"];\n", name,
                      s->scc_id);
   }
+  else
+  {
+    GNUNET_asprintf (&s_acc, "\"%s\" [shape=circle];\n", name, s->scc_id);
+  }
 
   if (NULL == s_acc)
   {
@@ -209,15 +226,31 @@
 
     if (ctran->label == 0)
     {
-      GNUNET_asprintf (&s_tran,
-                       "\"%s\" -> \"%s\" [label = \"epsilon\", color=\"0.%i 
0.8 0.95\"];\n",
-                       name, to_name, s->scc_id);
+      if (GNUNET_YES == ctx->coloring)
+      {
+        GNUNET_asprintf (&s_tran,
+                         "\"%s\" -> \"%s\" [label = \"ε\", color=\"0.%i 0.8 
0.95\"];\n",
+                         name, to_name, s->scc_id);
+      }
+      else
+      {
+        GNUNET_asprintf (&s_tran, "\"%s\" -> \"%s\" [label = \"ε\"];\n",
+                         name, to_name, s->scc_id);
+      }
     }
     else
     {
-      GNUNET_asprintf (&s_tran,
-                       "\"%s\" -> \"%s\" [label = \"%c\", color=\"0.%i 0.8 
0.95\"];\n",
-                       name, to_name, ctran->label, s->scc_id);
+      if (GNUNET_YES == ctx->coloring)
+      {
+        GNUNET_asprintf (&s_tran,
+                         "\"%s\" -> \"%s\" [label = \"%c\", color=\"0.%i 0.8 
0.95\"];\n",
+                         name, to_name, ctran->label, s->scc_id);
+      }
+      else
+      {
+        GNUNET_asprintf (&s_tran, "\"%s\" -> \"%s\" [label = \"%c\"];\n", name,
+                         to_name, ctran->label, s->scc_id);
+      }
     }
 
     GNUNET_free (to_name);
@@ -239,17 +272,17 @@
 
 
 /**
- * Save the given automaton as a GraphViz dot file
+ * Save the given automaton as a GraphViz dot file.
  *
- * @param a the automaton to be saved
- * @param filename where to save the file
- * @param verbose if set to GNUNET_YES the generated graph will include extra
- *                information such as the NFA states that were used to generate
- *                the DFA state etc.
+ * @param a the automaton to be saved.
+ * @param filename where to save the file.
+ * @param options options for graph generation that include coloring or verbose
+ *                mode
  */
 void
 GNUNET_REGEX_automaton_save_graph (struct GNUNET_REGEX_Automaton *a,
-                                   const char *filename, int verbose)
+                                   const char *filename,
+                                   enum GNUNET_REGEX_GraphSavingOptions 
options)
 {
   char *start;
   char *end;
@@ -268,7 +301,10 @@
   }
 
   ctx.filep = fopen (filename, "w");
-  ctx.verbose = verbose;
+  ctx.verbose =
+      (0 == (options & GNUNET_REGEX_GRAPH_VERBOSE)) ? GNUNET_NO : GNUNET_YES;
+  ctx.coloring =
+      (0 == (options & GNUNET_REGEX_GRAPH_COLORING)) ? GNUNET_NO : GNUNET_YES;
 
   if (NULL == ctx.filep)
   {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]